forward_list //有自己專有版本的insert和emplace;
forward_list //不支援push_back和emplace_back
vector, string //不支援push_front和emplace_front
c.push_back(t), c.emplace_back(args) //在c的尾部建立乙個值為t的或者由args建立的元素,返回void
c.push_front(t), c.emplace_back(args) //同上,吧尾部改為頭部
c.insert(p,t), c.emplace(p,args) //在迭代器p的前面建立乙個t或由args生產乙個值插入,返回指向新新增元素的迭代器
c.insert(p, n, t) //在迭代器p指向的元素之前插入n個t值,返回指向新新增的第乙個值的迭代器。
c.insert(p, b, e) //吧迭代器b,e之間的元素插入到p之前,返回指向新新增的第乙個元素
c.insert(p, il) //il是乙個花括號包圍的元素值列表。同上
//從標準輸入讀取資料,將每個單詞放到容器末尾
string word;
while(cin>>word)
container.push_back(word);
由於string是乙個字元容器,我們可以用push_back在string末尾新增字元:
void pluralize(size_t cnt, string &word)
這個操作是吧元素插入到容器頭部,
listilist;
for(size_t ix=0 ; ix != 4 ; ++ix)
insert提供更加一般的新增功能,隨機插入。
有些容器不支援push_front,但它們對於insert操作並無類似的限制
vectorsvec;
listslist;
//等價於呼叫slist.push_front("hello!");
slist.insert(slist.begin(), "hello!");
svec.insert(svec.begin(), "hello!"); //速度回比較慢
//在c的末尾構造乙個sales_data物件
//使用三個引數的sales_data建構函式
c.emplace_back("978-0590353403", 25, 15.99);
//錯誤:沒有接受三個引數的push_back版本
c.push_back("978-0590353403", 25, 15.99);
//正確:建立乙個臨時的sales_data物件傳遞給push_back
c.push_back(sales_data("978-0590353403", 25, 15.99));
emplace函式在容器中直接構造元素。傳遞給emplace函式的引數必須與元素型別的建構函式相匹配。
//在解引用乙個迭代器或呼叫front或front之前檢查是否有元素
if(!c.empty())
這裡還有兩種訪問方式
at和下標操作
但是只適用於string, vector, deque, array
c[n] //返回c中下標為n的元素引用
c.at(n) //返回c中下標為n的元素引用
訪問成員函式返回的是引用,下標操作和安全的隨機訪問
vector下標是從0開始的,但是如果vector為空的話,那麼
vectorsvec; //空vector
cout<
c.pop_back() //刪除c中尾元素
c.pop_front() //刪除c中首元素
c.erase(p) //刪除迭代器p指向的元素
c.erase(b, e) //刪除迭代器b和e之間的元素
c.clear() //刪除c中的所有元素
而且這些操作的返回值是void,所以在彈出之前要儲存好這個值
while(!ilist.empty())
迴圈刪除乙個list中的所有奇數
listlst=;
auto it=lst.begin();
while(it != lst.end())
if(*it%2) //若為奇數
it=lst.erase(it); //刪除此元素
else
++it;
forward_listflst=;
auto prev=flst.before_begin(); //表示flst的「首前元素」
auto curr=flst.begin(); //表示flst總的第乙個元素
while(curr != flst.end())
else
}
使用resize來增大或縮小容器,和往常一樣array不支援resize。
listilist(10, 42); //10個int:每個的值都是42
ilist.resize(15); //將5個值為0的元素新增到ilist的末尾
ilist.resize(25, -1); //將10個值為-1的值加到末尾
ilist.resize(5); //從末尾刪除20個元素
好的我們要知道對容器的操作會改變迭代器的有效性!!!
看程式!!!
//傻瓜迴圈,刪除偶數元素,複製每個奇數元素
vectorvi=;
auto iter=vi.begin(); //呼叫begin而不是cbegin,因為我們要改變vi
while(iter != vi.end())
else
}
ps:不幹了,尼瑪這太長了,先讓我好好消化一下,而且馬上就考試了,忙死啦!!!!我要堅持不下了!!! 《C primer》 順序容器
順序容器 vector 支援快速隨機訪問 list 支援快速插入 刪除 deque 雙端佇列 順序容器介面卡 stack 後進先出 lifo 棧 queue 先進先出 fifo 棧 priority queue 有優先順序管理的佇列 容器元素型別必須滿足條件 1.支援賦值運算,2.物件可以賦值 因為...
C primer 順序容器
順序容器 vector deque list 介面卡 根據原始容器型別所提供的操作,通過定義新的操作介面,適應基礎的容器型別。容器元素初始化 cc 預設建構函式 cc n n個值初始化,只適用於順序容器,必須給出缺省建構函式 cc n,t n個t只適用於順序容器,可以不給,但要給出 t t 建構函式...
足跡C primer 25 容器庫概覽
首先順序容器幾乎可以儲存任意型別的元素。vector lines vector的vector iterator 迭代器 iterator 模式,又叫做游標 cursor 模式。gof給出的定義為 提供一種方法訪問乙個容器 container 物件中各個元素,而又不需暴露該物件的內部細節。const ...