C 順序容器vector,deque,list

2021-07-06 04:15:23 字數 4685 閱讀 3693

容器即可以包含各種的資料形式的結構類,c++ stl中可以理解為存放其他物件的物件,在c++標準庫中有許多容器型別,包括順序容器和關聯容器,這裡介紹幾種順序容器的基本操作和應用;

1、這裡先介紹標準容器定義的運算子:

這裡a ,b 為容器例項。

2、所有容器的迭代器訪問介面

3、其他的一些通用訪問介面

4、介紹完了一般容器的介面外,這裡再詳細說明順序容器的介面,順序容器一般介面

5、順序容器其他介面,與所支援的容器型別有關

6、迭代器及最大值最小值

各容器都有相應的迭代器iterator,一般用於指向容器中的成員,類似於指標。一般使用a.begin()來獲取容器a的開始迭代器,其指向a中第乙個元素,a.end()來獲取容器a的末尾迭代器,不指向任何資料,迭代器可以通過加減整數值來移動位置,指向容器中的任意元素。

vector:: iterator it; //it可以讀寫vector的元素;

string:: iterator it; //it可以讀寫string中的字元;

vector::const_iterator it; //it只能讀元素,不能寫;

string::const_iterator it; //it只能讀元素,不能寫;

雖然string不是容器,但是這裡也可以使用迭代器,vector,string等可以使用下標進行元素訪問,而有些容器就只能使用迭代器來訪問資料了;

迭代器it指向的資料為(*it)。

在c++中有兩個函式可以獲取容器中一段範圍內的最大值和最小值分別為:iterator max_element(iterator i, iterator j) ;iterator min_element(iterator i, iterator j)定義在檔案algorithm中,返回值也是乙個迭代器,輸入為兩個迭代器邊界[i, j)。

7、向量vector

在c++11中vector可以利用集合數來直接初始化:vector v;此功能只能在vs2012以上中才被完全支援。上面介紹了一些相關的介面操作和函式,這裡先對vector進行相關練習測試:

#include 

#include

using

namespace

std;

int main()

; vector

vec1,vec2,vec3; //較少有直接賦值的,與陣列不一樣,int可以是其他基本資料型別,也可以其他自己定義的型別結構

for(int i = 0; i< 6; i++)

vec3 = vec2;//賦值

vec1.insert(vec1.begin()+2,10); //第二個位置插入10

vec1.erase(vec1.begin()+4); //第四個位置刪除

vec2.pop_back(); //末尾數刪除

vec2.push_back(10); //末尾新增10

cout

<< "vec3 size:"

<< vec3.size() << endl;

cout

<< "vec3 max_size:"

<< vec3.max_size() << endl;

cout

<< "vec3 front:"

<< vec3.front() << endl;

cout

<< "vec3 back:"

<< vec3.back() << endl;

cout

<< "\nvec1:" ;

for(int i = 0; i < vec1.size(); i++)

cout

<< " "

<< vec1[i] ;

cout

<< "\nvec2:" ;

for(int i = 0; i < vec2.size(); i++)

cout

<< " "

<< vec2[i] ;

cout

<< "\nvec3:" ;

for(int i = 0; i < vec3.size(); i++)

cout

<< " "

<< vec3[i] ;

return

0;}

測試結果:

8、雙端佇列,與向量差不多,具有相似的方法

#include 

#include

using

namespace

std;

int main()

; for(int i = 0; i < 6; i++)

deq1.push_back(a[i]);

deq2 = deq3 = deq1; //賦值

deq1.insert(deq1.begin()+2,10);

deq1.erase(deq1.end()-2);

deq2.pop_back();

deq2.push_back(10);

deq3.pop_front(); //雙向佇列新加

deq3.push_front(10);

cout

<< "\ndeq1:" ;

for(int i = 0; i < deq1.size(); i++)

cout

<< deq1.at(i) << " " ;

cout

<< "\ndeq2:" ;

for(int i = 0; i < deq2.size(); i++)

cout

<< deq2.at(i) << " ";

cout

<< "\ndeq3:" ;

for(int i = 0; i < deq3.size(); i++)

cout

<< deq3[i] << " ";

return

0;}

測試結果:

9、列表,list與前面兩個有點不一樣,不能通過下標訪問元素,其迭代器也不支援數字運算(+ - =),具有remove(),splice()等功能函式;

#include 

#include

using

namespace

std;

void display(list

listn) //list輸出函式

else

cout

<< " null list!";

}int main()

; for(int i = 0; i < 6; i++) //不支援下標訪問

list4 = list5 = list6 = list1;

list1.remove(3); //刪除第三個數

list

::iterator it1 = list4.begin();

//list 不支援iterator 的代數運算+ = 等

advance(it1,3); //前進3個

list4.insert(it1,10);

list

::iterator it2 = list5.begin();

advance(it2,3);

list5.splice(it2,list6); //list6連線到list5的it2位置,list6刪除

cout

<

display(list1);

cout

<

display(list2);

cout

<

display(list3);

cout

<

display(list4);

cout

<

display(list5);

cout

<

display(list6);

return

0;}

測試結果:

陣列array也是一種順序容器,array 定義的時候必須定義陣列的元素個數:arraya = ;

array的應用與其他的容器差不多,只不過array不能再新增或刪除元素。

C 順序容器

一 順序容器型別 順序容器 vector list deque 介面卡 stack queue priority queue 使用這些容器都必須使用相應的標頭檔案 二 容器元素初始化 cc 建立乙個名為c的空容器 cc c2 建立容器c2的副本 cc b,e 建立c,其元素是迭代器b和e的範圍內的副...

C 順序容器

1 概述 乙個容器就是一些特定型別物件的集合。順序容器型別 描述vector 可變大小陣列,支援快速訪問,在尾部之外的地方插入或刪除時可能很慢 deque 雙端佇列。支援快速訪問,在頭尾插入刪除會很快。list 雙向列表。只支援雙向順序訪問。插入刪除很快 forward list 單向列表。只支援單...

C 順序容器

一 各個順序容器效能差異主要體現在一下兩個方面 1.在容器中任意位置新增和刪除元素的代價 2.隨機訪問容器中元素的代價 vector list deque forward list array string vector是可變大小陣列,支援快速隨機訪問,在尾部插入和刪除元素較為方便 list是雙向鍊...