2021.07.14牛客學習
阿新 • • 發佈:2021-07-14
牛客學習知識點
-
c語言逗號運算子,這個經常會不注意,但平時經常寫的int a,b=9;肯定是給b賦值,所以cout<<(a,b);肯定是輸出b
-
vector迭代器erase掉一個元素會使後面的所有迭代器失效,所以要使用一個迭代器去接返回值
it = v_obj.erase(it++);
-
std::setw :需要填充多少個字元,預設填充的字元為' '空格
std::setfill:設定std::setw將填充什麼樣的字元,如:std::setfill('*')
std::setbase(n):將輸出資料轉換為n進位制
std::setprecision():控制輸出流顯示浮點數的數字個數,C++預設的流輸出數值有效位是6。
#include <iostream> #include <iomanip> #include <sstream> #include <shlobj.h> //AppData std::wstring GetUserAppDataDir() { std::wstring appdata; wchar_t buffer[MAX_PATH]; ::ZeroMemory(buffer, MAX_PATH*sizeof(wchar_t)); if (::SHGetSpecialFolderPath(NULL, buffer, CSIDL_APPDATA, NULL)) appdata = buffer; if (appdata.substr(appdata.length() - 1) != L"\\") { appdata.append(L"\\"); } return appdata; } //生成日誌檔案路徑 std::wstring GetLogFileName() { SYSTEMTIME sysTime; ::GetLocalTime( &sysTime ); std::wstringstream logFileName; logFileName << GetUserAppDataDir().c_str() << L"_" << sysTime.wYear << L"_" << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wMonth << L"_" << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wDay << L"_" << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wHour << L"_" << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wMinute << L"_" << std::setw( 2 ) << std::setfill( L'0' ) << sysTime.wSecond << L".log"; return logFileName.str(); } //字串轉數字 template <class T> T to_num( const char* s ) { T tmp(0); std::istringstream is(s); is >> std::setbase(10) >> tmp;//setbase(n):將輸出資料轉換為n進位制 if(is.fail()) { return 0; } return tmp; }; //測試程式碼 int main() { int a = 1; int b = 2; char c = '$'; //輸出: 1 std::cout << std::setw( 4 ) << a << std::endl; //輸出:$$$1 std::cout << std::setw( 4 ) << std::setfill( c ) << a << std::endl; //輸出:$$$12 std::cout << std::setw( 4 ) << std::setfill( c ) << a << b << std::endl; //輸出日誌檔案路徑 std::wcout << GetLogFileName().c_str() << std::endl; std::cout << "\n" << std::endl; //std::setbase()的使用 int num = to_num<int>("1234"); long ldata = to_num<long>("123456"); std::cout << num << std::endl; std::cout << ldata << std::endl; std::cout << "\n" << std::endl; std::cout << "255(2進位制): " << std::setbase(2) << 255 << std::endl;//二進位制輸出 std::cout << "255(8進位制): " << std::setbase(8) << 255 << std::endl;//八進位制輸出 std::cout << "255(16進位制): " << std::setbase(16) << 255 << std::endl;//十六進位制輸出 //setprecision()的作用: 控制輸出流顯示浮點數的數字個數(C++預設的流輸出數值有效位是6) //如果與setiosflags(ios::fixed)合用,可以控制小數點右邊的數字個數。 //setiosflags(ios::fixed)是用定點方式表示實數。 //setiosflags(ios::scientific)是用指數方式表示實數。 std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(8) << 12.123456 << std::endl; //如果與setiosflags(ios::scientific)合用,可以控制指數表示法的小數位數。 //在用浮點表示的輸出中,setprecision(n)表示有效位數。 //在用定點表示的輸出中,setprecision(n)表示小數位數。 system("pause"); return 0; }
-
派生類無論是public、protected、private繼承,都能夠訪問和修改基類的public和protected成員,而派生類物件僅當public繼承時才能夠訪問和修改基類成員,因此在基類中定義的protected成員在私有繼承的派生類中可訪問可修改的