// C++03 方式 for (std::vector需要謹慎的一些應用。::const_iterator ci = v.begin(); ci != v.end(); ++ci); // C++11 方式 for (auto ci = v.cbegin(); ci != v.cend(); ++ci); // 注意 cbegin() 和 cend() 返回一個 const_iterator
auto x = 10.0; // 如果將 `10.0' 變換為 `10', x 將變為一個整型變量 // 此處可能會給依賴於它的重載函數帶來困擾 // 因此,建議1:利用auto消除繁瑣而不是用來保持一致性 for (auto i = 0ul; i < v.size(); ++i); // 此處 auto i = 0ul 相當於 `unsigned long int i=0' // 建議 2: 不要針對特定類型使用auto,因為那樣做會給你帶來不少問題 // 建議 3: 針對建議1和2,不要對常量使用auto
// the C++03 way for (std::vector::iterator i = v.begin(); i != v.end(); ++i); // the C++11 way for (int &item: v); // item 將從v的begin()執行到v的end() // 注意這裡的引用,它允許我們改變v中的內容 for (const int &item: v); // 這時不能改變內容,引用可以提速 for (int item: v); // 通過傳值,不能改變v中內容
// C arrays char array1[] = {'A', 'B'}; double array2[] = {32.0, 6.003, -0.1}; // C++03 vectors std::vectorcpp03vector1; cpp03vector1.push_back('A'); cpp03vector1.push_back('B'); std::vector cpp03vector2(3); cpp03vector2[0] = 32.0; cpp03vector2[1] = 6.003; cpp03vector2[2] = -0.1; // C++11 vectors std::vector cpp11vector1 = {'A', 'B'}; std::vector cpp11vector2 = {32.0, 6.003, -0.1}; // or... std::vector cpp11vector3{'A', 'B'}; std::vector cpp11vector4{32.0, 6.003, -0.1}; // 注意這種方式也適用於STL中的其他容器, 不僅僅是std::vector
#include
#include // C arrays char carray1[] = "Abc"; // caution, an unseen '\0' is added to the end float carray2[] = {0.2f, 33.33f}; // C++ arrays std::arraycpparray1{{'A', 'b', 'c'}}; std::array cpparray2{{0.2f, 33.33f}}; // 關注點 1: 尺寸在編譯的時候推導 // 關注點 2: 數組尺寸不可變 // 關注點 3: 括號裡的類型由參數列表決定 // 新舊數組的對比 std::cout << sizeof carray1 - 1; // -1 因為額外的 '\0' std::cout << sizeof carray2 / sizeof (float); // 元素的個數 != 字節數 std::cout << cpparray1.size(); std::cout << cpparray2.size(); carray2[-5] = 0.1f; // 下溢 cpparray2.at(-5) = 0.1f; // throws std::out_of_range 異常 // C++ arrays 比 C arrays好的原因有很多,從上述代碼可見一斑
set>在C++11中可以編譯了。(注意最後兩個尖括號之間沒有空間哦)
2 std::string 有了front和back成員函數。
3 文件流可以接受std::string類型的文件名,意味著我們不再需要使用可笑的c_str()進行轉換。
4 可以很方便的將數值想std::string進行類型轉換。通過以下重載函數:
string to_string(int)
string to_string(float)
string to_string(double)
...