各個容器都包含在自己的標頭檔案中
構造:v v1;
v v2(v1);
v v1=;
操作(所有容器的基本操作):
v1.size();返回容器大小;
swap(v1,v2)交換容器元素//僅當元素型別一致是才可交換
v1.swap(v2);交換v1,v2的元素;
v1.max_size();返回容器可儲存的最大元素數目;
v1.empty();判斷容器是否為空;
v1.insert(args);想容器中插入元素;
v1.emplace(inits);使用inits構造c中的乙個元素;
v1.erase(args); 刪除指定的args元素;
v1.clear();刪除容器內所有元素;
關係 運算子:
==;!=;
<,>,<=,>=;
迭代器:
v1.begin(),v1.end() 返回首位元素後的迭代器;
v1.cbegin(),v1.cend() 返回const_iterrator;
容器的拷貝:
一:直接拷貝;
二:拷貝另乙個容器迭代器指定範圍內的元素;
list
v1 =;//列表初始化
vector
char *>v1=;
list
list2(v1);//正確,型別匹配
deque
list1(v1);//錯誤 容器型別不匹配
forward_listv(v1.begin(),v1.end())//正確,雖然型別不匹配但是const char* 元素可以轉換為string
新增元素:
push_back:
vector
v;string word;
while(cin>> word)
//在string的末尾新增字元
void fun(size_t count, string &word)
push_front///在容器頭新增元素
list
ilist ;
for(size_t ix=0;ix!=4;ix++)
insert//在容器特定位置插入元素
v.insert(v.begin(),"hello");//等價於v.push_front();
v.insert(iter,"hello");//在迭代器iter前新增
vector
v=;v.insert(v.begin(),v.end-2,v.end());//將v的嘴壺兩個元素新增到v的開始位置
list
lst;
auto iter=lst.begin();
while(cin>>word)
iter=list.insert(iter.word);//用insert的返回值在特定位置插入元素
訪問元素:
if(!lst.empty())
如果從內部 啥暗處星對與insert的函式是erase
list
bob;
auto it=bob.begin();
while(it!=bob.end())
}
特殊的forward_list操作:
當新增或刪除元素時,之前的袁術的後繼會發生改變,需要訪問前去是需要改變前驅的連線,但是forward_list是單向鍊錶沒有獲取其前驅的方法,所以在forward__list中是通過改變給定元素後的元素來完成的;
在forward_list中沒有定義insert,emplace和erase,而是定義了insert_after,emplace_after和erase_after。
forward_listflast=;
auto prev=flast.before_begin();
auto cuur=flast.begin();
while(curr!=flast.end())
}
改變容器大小:
v.resize(n)來增大或減小容器的大小;若n小於v.size()則多出的元素被丟棄
容器的操作可能是迭代器失效:
*vector和string中如果記憶體被重新分配則迭代器、指標和引用都會失效,如果未重新分配記憶體,則插入如元素之前的迭代器,指標,引用都有效,後面的都失效
*deque在首尾之外插入都會導致失效,若果在收尾新增則不會失效
*對於list、forward_list無影響
**當我們啥暗處元素時尾後迭代器都會失效
vector的增長:
為了支援隨機訪問,vector將元素緊挨著存放,通常會按預留一些空間來儲存更多的新元素,這樣就不會因為每次新增新元素都重新分配記憶體了,同時也提高了效率。
管理容量的成員函式:
v.shrink_to_fit();//將容量減少為何何size同樣的大小,只適用於vector、string和deque;
v.capacity();//不重新分配記憶體的話能儲存的最大元素數;
v.reserve(n);//分配至少能存n個元素的空間
string的其他方法:
stack(棧),queue(佇列),priority_queue(優先佇列)。
#include
deque
deq;
stack
sk(deq);//從deq拷貝元素到sk;
for(size_t ix=0; ix!=10;ix++)
while(!sk.empty())
stack
s;//定義空棧s
#include///包含queue和priority_queue
queue
q;q.pop();//返回queue中隊首元素或priority_queue中優先順序高的元素,**並刪除**
q.front();//返回手元素或尾元素,不刪除
q.top();//只適用於priority_queue
q.back();//只適用於queue
q.push(item);在隊尾或priority_queue恰當位置新增元素
q.emplace(args);//其值為item或者由args構造
C 順序容器小結
c primer 中文第四版中,第九章 容器和演算法 標準庫定義了順序容器和關聯容器。順序容器 sequential container 將單一型別元素聚集起來成為容器,然後根據位置來儲存和訪問這些元素。順序容器的元素排列次序與元素值無關,而是由元素新增到容器裡的次序決定。標準庫定義了三種順序容器型...
C 順序容器學習小結
一 c 陣列的描述 一維陣列的動態記憶體分配 int num new int len delete num 二維陣列的動態記憶體分配 1 知第二維 char num n 指向陣列的指標 num newchar m n deletenum 2 知第一維 char num m 指標的陣列 for int...
C 順序容器的操作
1 新增元素 2 刪除元素 3 設定容器大小 4 獲取容器元素 size tpye,無符號整型,容器長度 iterator,容器迭代器 const iterator,唯讀容器迭代器 reverse iterator,逆序迭代器 const reverse iterator唯讀逆序迭代器 differ...