關於c 順序容器小結(二) 基本操作

2021-07-07 02:41:02 字數 3185 閱讀 8147

各個容器都包含在自己的標頭檔案中

構造: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...