順序容器的介紹及常用操作

2021-09-07 20:55:34 字數 1777 閱讀 1596

乙個容器就是一些特定型別物件的集合。順序容器為程式設計師提供控制元素儲存和訪問順序的嫩裡。這種順序不依賴於元素的值,而是元素加入容器時的位置相對應。

vector 可變大小陣列。支援快速的隨機訪問,在尾部之外的位置插入或者刪除元素會很慢

deque 雙端佇列,支援,快速隨機訪問,在尾部之外的位置插入或刪除元素可能很慢

list 雙向列表。支援快速隨機訪問,在列表任何位置插入都很快

forward_list 單向鍊錶,只支援單向順序訪問,在鍊錶任何位置進行插入/刪除操作都很快

array:固定大小陣列,支援快速隨機訪問,不能新增或者刪除元素

string:與vector類似,但是專門用於儲存字元。隨機訪問快,在尾部插入/刪除速度快

選擇容器的基本原則

首選vector

如果程式中有很多小的元素,且空間的額外開銷很重要,則不要使用list或者forword_list

如果程式要求隨機訪問元素,應使用vector或者deuqe

如果程式需要在頭尾插入或者刪除元素,使用list或者forword_list

如果程式程式需要在頭尾插入或者刪除元素,但不胡在中間位置進行插入或刪除操作,使用deque

如果程式只有在讀取輸入時才需要在容器中間插入元素,隨後需要隨機訪問元素

總之,常用三個容器

(1)容器首選vector,陣列連續,空間開銷小

(2)涉及隨機插入刪除,選擇list,鍊錶方便,但是空間上不連續,導致額外空間開銷大,酌情考慮。

(3)deque,中和前兩個特點,如果需要隨機訪問,但元素的刪除和插入只在兩端,使用deque。

型別別名

iterator :容器型別的迭代器型別

const_iterator: 可以讀取元素,不可以改變元素的容器型別的迭代器型別

size_type:無符號整型型別,size()返回的型別

difenrence_type:帶符號的整型型別,兩個迭代器像運算得到的值的型別

value_type :元素型別

reference:元素測左值型別

const_reference:cosnt左值型別

ps:我覺得上面並不是很重要看看就好,你可以使用auto或者decltype去拿到該型別。知道它是關於容器就行。

建構函式(初始化方式)(下面使用vector舉例)

vectorvec; :預設構造

vectorvec1(vec); :拷貝構造

vectorvec2(vec.begin(),vec.end()); :拷貝構造

vectorvec3 ; :列表構造

賦值與swap

vec1 = vec2;   //賦值

vec1 = ;

swap(vec1,vec2);//交換

vec.swap(vec2);

大小

vec.size();//返回vec的大小

vec.empty();//返回是否位空

新增/刪除元素(使用vector舉例)

vec.push_back(i) //在vec尾部新增元素i

vec.pop_bcak()//刪除尾部元素

vec.clear() //刪除容器元素

vec.erase( iterator i )//刪除i指向元素

vec.insert( iterator i,j)//在位置i新增元素j

(STL及演算法)7 順序容器的操作

1.容器的定義和型別別名 2.begin和end成員 這兩個成員返回的都是迭代器型別 順序容器三種 vector list deque 這三種順序容器的操作方式是一致的。include include include include using namespace std intmain list和...

順序容器常用操作 交換容器中的元素 增刪元素

c primer 9.3.1 9.3.3 1 交換容器中的元素 只能交換相同存放資料型別的容器,定長陣列array只能與同樣長度的array交換 2 新增元素 push back 在尾部追加 push front 在頭部追加 insert 在任何位置新增 emplace 構造後新增到指定位置 emp...

順序容器的操作1

include include include include using namespace std int main vector size type a1 liat和deque也有相同迭代器,下面列舉的也都是的,vector iterator a2 list是鍊錶,沒有下標,只能用迭代器,ve...