C語言中文網 目錄
首頁 > STL > 序列容器 閱讀:6,110

C++ vector添加(增加)元素

記住,向容器中添加元素的唯一方式是使用它的成員函數。如果不調用成員函數,非成員函數既不能添加也不能刪除元素。這意味著容器對象必須通過它所允許的函數去訪問,迭代器顯然不行。

可以通過使用容器對象的 push_back() 函數,在序列的末尾添加一個元素。例如:
std::vector<double> values;
values.push_back(3.1415926);
在這個示例中,push_back() 函數以傳入的參數 -3.1415926 作為新元素的值,然后把它添加到現有元素的后面。因為這里并沒有現有的元素,所以這個元素就是第一個元素。如果沒有調用 reserve(),容器就會為這個新元素分配內存。這里,第二個版本的 push_back() 使用了右值引用參數,這樣就可以通過移動運算來添加元素。例如:
std::vector<std::string> words;
words.push_back(string("adiabatic"));
// Move string("adiabatic") into the vector
這里 push_back() 的參數是一個臨時對象,因此這會調用右值引用版的函數。當然,也可以這樣寫:
words.push_back ("adiabaticft"); // Move string("adiabatic") into the vector
編譯器會生成一個以"adiabatic”為初值的 string 對象,然后這個對象會像前面那樣移動到 vector 中。 

還有一個更好的方法來添加元素。emplace back() 比 push_back() 更有效率。下面這個代碼片段說明了為什么:
std::vector<std::string> words;
words.push_back (std:: string ("facetious") ) ; // Calls string constructor & moves the string object 
words•emplace_back("abstemious");// Calls string constructor to create element in place
emplace_back() 的參數正是添加到容器中的對象的構造函數所需要的參數。emplace_back() 用它的參數作為構造函數的參數,在容器中生成對象。如果不想使用移動運算,這個示例中就要使用 push_back()。可以在 emplace_back() 函數中使用盡可能多的參數,只要它們滿足對象構造函數的要求。這里有一個使用多參數的 emplace_back() 的示例:
std::string str {"alleged"};
words.emplace_back(str, 2, 3);
// Create string object corresponding to "leg" in place
emplace_back() 函數會調用接收三個參數的 string 構造函數,生成 string 對象,然后把它添加到 words 序列中。構造函數會生成一個從索引 2 幵始、包含 str 中三個字符的子串。

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo