C primer 順序容器

2021-08-25 10:35:06 字數 3352 閱讀 2989

順序容器:vector deque list

介面卡:根據原始容器型別所提供的操作,通過定義新的操作介面,適應基礎的容器型別。

容器元素初始化:

cc; //預設建構函式

cc(n);//n個值初始化,只適用於順序容器,必須給出缺省建構函式

cc(n,t); //n個t只適用於順序容器,可以不給,但要給出 t(t)建構函式。

cc(begin,end);//begin,end複製到c中

cc1(c2);//c1和c2是相同的容器型別,存放相同型別元素,c2拷貝給c1

如果想要把不同容器的元素相互賦值,則可用第4個建構函式或用assign。

迭代器的行為像指標。

用作容器型別要遵循2個條件

1.能賦值運算。

2.能複製。

注意:引用型別不能複製和賦值。io流也不支援複製。

vector deque隨機儲存

list 鍊錶

注意迭代器失效問題。

difference_type 儲存兩個迭代器差值的有符號整型,可為負數

value_type 元素型別

reference 元素左值型別,value_type&

const_reference 元素常量左值型別,const value_type&

size_type 無符號整型

const_iterator

reverse_iterator

const_reverse_iterator

時刻更新迭代器,不然會出現迭代器失效問題。

insert都是插在iter的前面。

iterator insert(iter,n); //n插入iter前面,返回新元素的迭代器

void insert(iter,begin,end); //begin end插入iter前面。

void insert(iter,n,t); n個t插入iter前。

如果容器元素支援的比較符,可以讓容器整體比較。

如 vectorc1,c2; c1==c2;

c.size()

c.max_size();

c.empty();

c.resize(n); //改變c的長度

c.resize(n,t);

reference c.back() ; //得到最後元素的引用

reference c.front(); //得到最前面元素的引用

c.at(n)==c[n];

c.clear();//清空

c.erase(iter); //返回iter後面的元素

c.erase(begin,end);//返回begin,end後面的元素

pop_front()和front()經常一起使用。

iterator find(begin,end,value);//找到value出現的第乙個地方。

string 增加的建構函式:cp為空字元結尾的陣列

1.string s(cp,n); //cp指向的陣列的前n個元素。

2.string s(s2,pos2);//s2中從pos2開始複製給s

3.string s(s2,pos2,len);//s2中從pos2開始複製len個字元給s

string特有函式:

1.s.insert(pos,s2);//pos前插入string物件,,,pos為int

2.s.insert(pos,s2,pos,len);//pos前插入s2從pos開始的len長度

3.s.insert(pos,cp,len);//pos前插入cp的前len個字元

4.s.insert(pos,cp);//pos前插入cp

5.s.assign(s2); //s2賦值給s

6.s.assign(cp,len);//cp的len個字元給s

7.s.assign(cp);//cp賦給s

8.s.erase(pos,len);//刪除從pos開始的len長

9.s.substr(pos,n);//返回乙個string字串,包含從pos開始的n個字元。

10.s.substr(pos);//返回string字串,包含從pos開始的

11.s.substr();//返回s的副本

2.s.replace(pos,len,args);//將args的元素替換 pos開始長為len的字元。

3.s.replace(b,e,args);//args的元素替換b,e 的所有字元

args可為:

1.s2

2.s2,pos,len

3.cp

4.cp,len

5.n,c

6.b2,e2; //迭代器

string提供的查詢函式

1.s.find(args);

2.s.rfind(args);

3.s.find_first_of(args);//args中任意字元第一次出現的位置

4.s.find_last_of(args);

5.s.find_first_not_of(args);//查詢第乙個不屬於args的字元

6.s.find_last_not_of(args);//最後乙個不屬於args的字元

args為:

1.c,pos //從pos開始,查詢字元c,預設pos=0

2.s2,pos //pos開始查詢string s2 pos預設為0

3.cp,pos //pos開始查詢cp(cstring) pos預設為0

4.cp,pos,n //pos開始查詢cp所指向的陣列的前n個字元

string 的compare函式

1.s.compare(s2);

2.s.compare(pos1,n1,s2); //從pos1開始的n1個字元與s2做比較

3.s.compare(pos1,n1,s2,pos2,n2); //從pos1開始的n1個字元與s2從pos2開始的n2個字元比較

4.s.compare(cp) ;//與char* 比較

5.s.compare(pos1,n1,cp);//從pos1 開始的n1個字元與cp比較

6.s.compare(pos1,n1,cp,n2);//pos1開始的n1個字元與cp的前n2個字元比較。

介面卡:容器介面卡,迭代器介面卡,函式介面卡

預設deque stack和queue

vector priority_queue

當然可以改變關聯容器。

如stack>

stack的關聯容器為順序容器

queue的關聯容器必須支援push_front();

priority_queue 的關聯容器必須提供隨機訪問。

priority_queue設定優先順序插入。

《C primer》 順序容器

順序容器 vector 支援快速隨機訪問 list 支援快速插入 刪除 deque 雙端佇列 順序容器介面卡 stack 後進先出 lifo 棧 queue 先進先出 fifo 棧 priority queue 有優先順序管理的佇列 容器元素型別必須滿足條件 1.支援賦值運算,2.物件可以賦值 因為...

C Primer 筆記 順序容器

將單一元素型別聚集起來成為容器,然後根據位置來儲存和訪問這些元素 vectorivec listslist dequedstr vector 支援快速隨機訪問 list 支援快速插入 刪除 deque 雙端佇列 stack 後進先出 lifo 棧 queue 先進先出 fifo 佇列 priorit...

C primer 順序容器(3)

前幾篇主要是把vector與string放在一起討論,本篇主要是將list與forward list放在一起比較 list故名思義就是列表的意思。首先我們來看看列表與我們之前討論的vector和string有什麼區別。2.正因為這個特點,如果list要訪問容器中的某一元素,就得遍歷整個容器。使得訪問...