順序容器和簡單演算法

2021-08-07 19:45:38 字數 3079 閱讀 5658

容器

一、順序容器

1、  概念

它將單一型別元素聚集起來成為容器,然後根據位置來儲存和訪問這些元素,即為順序容器。

2、型別

標準庫定義了三種順序容器的型別:vector、list、deque。

vector相當於c語言中的陣列,list相當於c語言中的鍊錶,而deque則是雙端可以插入的vector。

3、語法:

cc;  建立乙個空的容器

c c(c2);  把從c2中的內容複製給c

c c(b,e);  把b和e之間的內容複製給容器

容器的容器

vector> lines;

4、在順序容器中的操作

(1)將元素值複製到容器中

c.push_back(t); //順序容器都支援的操作

c.push_front(t); //只適用於list和deque容器型別

c.insert(p,t); //在迭代器p所指向的元素前面插入值為t的新元素

(2)訪問順序容器內元素的操作

c.back()//返回容器c的最後乙個元素的引用

c.front()//返回容器c的第乙個元素的引用

c[n]//返回下標為n的元素的引用只適用於vector和deque容器

c.at(n)//返回下標為n的元素的引用只適用於vector和deque容器

(3)刪除元素

c.erase(p) //刪除迭代器p所指向的元素,返回乙個迭代器,它指向被刪除元素後面的元素

c.erase(b,e) //刪除迭代器b和e所標記的範圍內所有的元素

c.clear() //刪除容器c內的所有元素,返回void

c.pop_back() //刪除容器c的最後乙個元素,返回void

c.pop_front() //刪除容器c的第乙個元素,返回void  只適用於list和deque容器

(4)賦值與swap

c1=c2刪除容器c1的所有元素,然後將c2的元素複製給c1

c1.swap(c2)交換內容:呼叫完該函式後,c1中存放的是c2原來的元素,c2中存放的則是c1原來的元素。c1和c2的型別必須相同,該函式的執行速度通常要比將c2複製到c1的操作快。

5、迭代器和迭代器範圍

*iter返回迭代器iter所指向的元素的引用

iter->mem對iter進行解引用,獲取指定元素中名為mem的成員,等效於(*iter).mem

vector和deque支援通過元素位置實現的隨機訪問,因此它們的迭代器可以有效地實現算數和關係運算。

用於計算vector物件的中點位置:

vector::iterator iter = vec.begin() + vec.size()/2

list容器的迭代器既不支援算數運算(加法或減法),也不支援關係運算(<=,<,>=,>),它只提供前置和後置的自增、自減運算以及相等(不等)運算。

listilist(vec.begin(),vec.end());

ilist.begin() + ilist.size()/2; //error

6、選擇容器型別的法則:

(1)如果程式要求隨機訪問元素,則應使用vector或deque容器

(2)如果程式必須在容器的中間位置插入或刪除元素,則應採用list容器

(3)如果程式不是在容器的中間位置,而是在容器首部或尾部插入或刪除元素,則採用deque容器

容器小結:

1、標準庫的順序容器有三個型別

vector:支援隨機訪問

list:不支援隨機訪問

deque:支援隨機訪問

2、  容器的常用操作:

插入:push_back(),insert()

刪除:erase()

訪問:back()

二、容器演算法

使用泛型演算法必須包含algorithm標頭檔案:#include

標準庫還定義了一組泛化的算數演算法:#include

1、  演算法accumulate

int sum = accumulate(vec.begin(),vec.end(),42); //sum設定為vec的元素之和再加上42

string sum = accumulate(v.begin(),v.end(),string(「」));

2、  演算法replace

replace(ilist.begin(),ilist.end(),0,16); //把0替換為16

3、  演算法count

int times = count(ivec.begin(),ivec.end(),0); //替換出現的次數

4、  排序演算法

bool cmp(int i,int j)

int main()

vectorvec;

for(int i=10;i>-1;i--)

vec.push_back(i);

sort(vec.begin(),vec.end(),cmp);

for(int i=0;icout<< vec[i] << 「 」;

cout << endl;

return 0;

5、  find_if演算法

bool find_5(int i)

int main()

vectorvec;

for(inti=0;i<10;i++)

vec.push_back(i);

vector::iteratorit = find_if(vec.begin(),vec.end(),find_5);

if(it!=vec.end())

cout<< *it << endl;

return 0;

STL順序容器簡單應用

include include includeusing namespace std void main01 演算法和迭代器能無縫連線 int num1 count v1.begin v1.end 3 cout num1 endl 容器裝元素 class teacher void main02 容器...

容器 順序容器

容器 include include include 容器元素型別必須滿足 1.支援賦值運算 2.物件可以複製 而io庫型別這兩個都不支援,因此,不能建立存放io型別物件的容器 容器的容器 記得加空格 list vector a list容器迭代器不支援演算法運算 也不支援關係運算 等,它只有自增,...

第二部分《容器和演算法》 順序容器

標準庫定義了三種順序容器 vector,list,deque 同時標準庫還提供了三種容器介面卡 adaptor 介面卡是根據原始的容器型別所提供的操作,通過定義新的操作介面,來適應基礎的容器型別。順序容器介面卡包括stack queue priority queue型別。1.利用迭代器來進行元素的傳...