c++11除了引入了許多新語法以外,還對標準庫進行了強化。今天就以容器的insert方法為例進行說明。
從c++98到c++11
c++98中的insert方法宣告
iteratorinsert(iterator
position,
const
value_type&val);
voidinsert(iterator
position,
size_typen,
const
value_type&val);
templatec++11中的insert方法inputiterator>
void
insert(iterator
position,
inputiterator
first,
inputiterator
last);
iteratorinsert(const_iteratorposition,
const
value_type&val);
iteratorinsert(const_iteratorposition,
size_typen,
const
value_type&val);
templateinputiterator>
iterator
insert(const_iteratorposition,
inputiterator
first,
inputiterator
last);
iteratorinsert(const_iteratorposition,
value_type&&val);
iterator細節比較新增單個元素insert(const_iteratorposition,
initializer_list
il);
iterator唯一的變化就是position的引數型別由發生了變化,功能相同但增加了對const_iterator的支援。這種變化適用於所有的insert方法,下面就不再說明了。insert(const_iteratorposition,
const
value_type&val);
填充多個元素
iterator這個方法可以在指定位置填充n個val。除了引數以外,方法的返回值從void變為iterator,返回最後乙個新增的元素的位置。有了這個返回值,在同乙個位置填充元素就會很方便。例如下面的**:insert(const_iteratorposition,
size_typen,
const
value_type&val);
std::list這個方法是c++11中追加的新方法,提供了對資料移動的支援。例項**如下:demo;
auto
position=
std::find(demo.begin(),demo.end(),
3);for(int
i=0;i
<
5;++i)
for(int
var:demo)
std::cout
<
在3的前面連續新增0,1,2,3,4。**輸出如下:
1,2,4,4,3,3,2,2,1,1,0,0,3,4,5,6,
以移動方式插入資料
iterator
insert(const_iteratorposition,
value_type&&val);
std::list輸出結果為:strlist;
std::string
str("how");
strlist.insert(strlist.begin(),
std::move(str));
for(auto
var:strlist)
std::cout
<
std::cout
<<
"str="
<
<
how,are,you,
str=
可以看到,str的內容從str中移除並插入到strlist中。
支援initializer_list
這個方法也是c++11中新追加的,提供對initializer_list的支援。示例**如下:
strlist.insert(strlist.begin(),);for(auto
var:strlist)
std::cout
<
在前面示例的基礎上新增再次在list的開頭插和「c++」和「11」兩個字串。執行結果如下:
c++,11,how,are,you,
作者觀點
c++程式設計師也需要與時俱進。要不然這麼多好東西不用是不是有點那個?
覺得本文有幫助?請分享給更多人。
c 11的新特性
1 型別說明符auto 2.decltype提取型別 int a 0 decltype a b b 10 cout b endl 3.基於範圍的for迴圈 4.虛函式的override和final指示符 final修飾類 類無法被繼承 final修飾虛函式 虛函式不能被重寫 override就是輔助...
C 11的新特性
c 11提供在類中定義類的資料成員,可以直接在成員之後新增 預設值 當通過編譯器自動生成的預設建構函式初始化物件時,對應的資料成員就會被初始化成對應的預設值。class test int main 在c 98中,陣列可以使用 來進行初始化,對自定義型別是不可以的。在c 11中,的使用範圍變得更廣,可...
C 11的新特性
1.auto關鍵字 編譯器可以根據初始值自動推導出型別。但是不能用於函式傳參以及陣列型別的推導。2.nullptr關鍵字 nullptr是一種特殊型別的字面值,它可以被轉換成任意其它的指標型別 而null一般被巨集定義為0,在遇到過載時可能會出現問題。3.智慧型指標 c 11新增了std share...