足跡C primer 26 順序容器操作

2021-06-22 10:17:22 字數 3305 閱讀 2707

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