C STL基本容器的使用

2022-06-24 14:30:14 字數 4483 閱讀 4663

c++中有兩種型別的容器:順序容器和關聯容器。順序容器主要有vector、list、deque等。其中vector表示一段連續的記憶體,基於陣列實現,list表示非連續的記憶體,基於鍊錶實現,deque與vector類似,但是對首元素提供插入和刪除的雙向支援。關聯容器主要有map和set。map是key-value形式,set是單值。map和set只能存放唯一的key,multimap和multiset可以存放多個相同的key。

容器類自動申請和釋放記憶體,因此無需new和delete操作。

一、vector

vector基於模板實現,需包含標頭檔案vector。

1.定義和初始化

//1.定義和初始化

vectorvec1;    //預設初始化,vec1為空

vectorvec2(vec1);  //使用vec1初始化vec2

vectorvec3(vec1.begin(),vec1.end());//使用vec1初始化vec2

vectorvec4(10);    //10個值為的元素

vectorvec5(10,4);  //10個值為的元素

//2.常用操作方法

vec1.push_back(100);            //新增元素

int size = vec1.size();         //元素個數

bool isempty = vec1.empty();    //判斷是否為空

cout              //刪除末尾元素

刪除之間的元素,其他元素前移

cout<<(vec1==vec2)?true:false;  //判斷是否相等==、!=、>=、<=...

vector::iterator iter = vec1.begin();    //獲取迭代器首位址

vector::const_iterator c_iter = vec1.begin();   //獲取const型別迭代器

//清空元素

//3.遍歷

//下標法

int length = vec1.size();

for(int i=0;i

coutvector::const_iterator iterator = vec1.begin();

for(;iterator != vec1.end();iterator++)

cout<

三、deque

deque容器類與vector類似,支援隨機訪問和快速插入刪除,它在容器中某一位置上的操作所花費的是線性時間。與vector不同的是,deque還支援從開始端插入資料:push_front()。其餘類似vector操作方法的使用。

四、map

c++中map容器提供乙個鍵值對(key/value)容器,map與multimap差別僅僅在於multiple允許乙個鍵對應多個值。需要包含標頭檔案map。對於迭代器來說,可以修改實值,而不能修改key。map會根據key自動排序。

//1.定義和初始化

mapmap1;                  //空map

//2.常用操作方法

map1[3] = "saniya";                    //新增元素

map1.insert(map::value_type(2,"diyabi"));//插入元素

"siqinsini"));

map1.insert(make_pair(4,"v5"));

string str = map1[3];                  //根據key取得value,key不能修改

map::iterator iter_map = map1.begin();//取得迭代器首位址

int key = iter_map->first;             //取得eky

string value = iter_map->second;       //取得value

map1.erase(iter_map);                  //刪除迭代器資料

map1.erase(3);                         //根據key刪除value

map1.size();                       //元素個數

map1.empty();                       //判斷空

map1.clear();                      //清空所有元素

//3.遍歷

for(map::iterator iter = map1.begin();iter!=map1.end();iter++)

{int keyk = iter->first;

string valuev = iter->second;

五、set

set的含義是集合,它是乙個有序的容器,裡面的元素都是排序好的,支援插入,刪除,查詢等操作,就像乙個集合一樣。所有的操作的都是嚴格在logn時間之內完成,效率非常高。set和multiset的區別是:set插入的元素不能相同,但是multiset可以相同。set預設自動排序。使用方法類似list。

六、各種容器總結**自:

(1)vector

內部資料結構:陣列。

隨機訪問每個元素,所需要的時間為常量。

在末尾增加或刪除元素所需時間與元素數目無關,在中間或開頭增加或刪除元素所需時間隨元素數目呈線性變化。

可動態增加或減少元素,記憶體管理自動完成,但程式設計師可以使用reserve()成員函式來管理記憶體。

vector的迭代器在記憶體重新分配時將失效(它所指向的元素在該操作的前後不再相同)。當把超過capacity()-size()個元素插入vector中時,記憶體會重新分配,所有的迭代器都將失效;否則,指向當前元素以後的任何元素的迭代器都將失效。當刪除元素時,指向被刪除元素以後的任何元素的迭代器都將失效。

(2)deque

內部資料結構:陣列。

隨機訪問每個元素,所需要的時間為常量。

在開頭和末尾增加元素所需時間與元素數目無關,在中間增加或刪除元素所需時間隨元素數目呈線性變化。

可動態增加或減少元素,記憶體管理自動完成,不提供用於記憶體管理的成員函式。

增加任何元素都將使deque的迭代器失效。在deque的中間刪除元素將使迭代器失效。在deque的頭或尾刪除元素時,只有指向該元素的迭代器失效。

(3)list

內部資料結構:雙向環狀鍊錶。

不能隨機訪問乙個元素。

可雙向遍歷。

在開頭、末尾和中間任何地方增加或刪除元素所需時間都為常量。

可動態增加或減少元素,記憶體管理自動完成。

增加任何元素都不會使迭代器失效。刪除元素時,除了指向當前被刪除元素的迭代器外,其它迭代器都不會失效。

(4)slist

內部資料結構:單向鍊錶。

不可雙向遍歷,只能從前到後地遍歷。

其它的特性同list相似。

(5)stack

介面卡,它可以將任意型別的序列容器轉換為乙個堆疊,一般使用deque作為支援的序列容器。

元素只能後進先出(lifo)。

不能遍歷整個stack。

(6)queue

介面卡,它可以將任意型別的序列容器轉換為乙個佇列,一般使用deque作為支援的序列容器。

元素只能先進先出(fifo)。

不能遍歷整個queue。

(7)priority_queue

介面卡,它可以將任意型別的序列容器轉換為乙個優先順序佇列,一般使用vector作為底層儲存方式。

只能訪問第乙個元素,不能遍歷整個priority_queue。

第乙個元素始終是優先順序最高的乙個元素。

(8)set

鍵和值相等。

鍵唯一。

元素預設按公升序排列。

如果迭代器所指向的元素被刪除,則該迭代器失效。其它任何增加、刪除元素的操作都不會使迭代器失效。

(9)multiset

鍵可以不唯一。

其它特點與set相同。

(10)hash_set(11)hash_multiset

鍵可以不唯一。

其它特點與hash_set相同。

(12)map

鍵唯一。

元素預設按鍵的公升序排列。

如果迭代器所指向的元素被刪除,則該迭代器失效。其它任何增加、刪除元素的操作都不會使迭代器失效。

(13)multimap

鍵可以不唯一。

其它特點與map相同。

(14)hash_map(15)hash_multimap

鍵可以不唯一。

其它特點與hash_map相同。

C STL基本容器比較

在stl中基本容器有 string vector list deque set map set 和map都是無序的儲存元素,只能通過它提供的介面對裡面的元素進行訪問 set 集合,用來判斷某乙個元素是不是在乙個組裡面,使用的比較少 map 對映,相當於字典,把乙個值對映成另乙個值,如果想建立字典的話...

C STL基本容器比較

摘自 在stl中基本容器有 string vector list deque set map set 和map都是無序的儲存元素,只能通過它提供的介面對裡面的元素進行訪問 set 集合,用來判斷某乙個元素是不是在乙個組裡面,使用的比較少 map 對映,相當於字典,把乙個值對映成另乙個值,如果想建立字...

C STL 容器高效使用

1.容器中物件拷貝高效 防剝離發生的方法 使容器包含指標而不是物件。ps stl容器是在建立拷貝,相比陣列,是動態建立,節省時間和空間 2.總是呼叫empty 而不是size 0來判斷容器是否為空 empty 對所有stl容器都是常數時間操作,而size 對某些容器 如list 是線性時間操作,si...