C 11新特性(26) 容器的insert成員

2021-08-20 05:22:36 字數 3164 閱讀 9146

c++11除了引入了許多新語法以外,還對標準庫進行了強化。今天就以容器的insert方法為例進行說明。

從c++98到c++11

c++98中的insert方法宣告

iterator

insert(iterator

position,

const

value_type&val);

void

insert(iterator

position,

size_typen,

const

value_type&val);

template

inputiterator>

void

insert(iterator

position,

inputiterator

first,

inputiterator

last);

c++11中的insert方法

iterator

insert(const_iteratorposition,

const

value_type&val);

iterator

insert(const_iteratorposition,

size_typen,

const

value_type&val);

template

inputiterator>

iterator

insert(const_iteratorposition,

inputiterator

first,

inputiterator

last);

iterator

insert(const_iteratorposition,

value_type&&val);

iterator

insert(const_iteratorposition,

initializer_list

il);

細節比較新增單個元素

iterator

insert(const_iteratorposition,

const

value_type&val);

唯一的變化就是position的引數型別由發生了變化,功能相同但增加了對const_iterator的支援。這種變化適用於所有的insert方法,下面就不再說明了。

填充多個元素

iterator

insert(const_iteratorposition,

size_typen,

const

value_type&val);

這個方法可以在指定位置填充n個val。除了引數以外,方法的返回值從void變為iterator,返回最後乙個新增的元素的位置。有了這個返回值,在同乙個位置填充元素就會很方便。例如下面的**:

std::list

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);

這個方法是c++11中追加的新方法,提供了對資料移動的支援。例項**如下:

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...