C STL庫 之順序容器vector的使用

2022-10-03 15:42:23 字數 2444 閱讀 6647

一、特點

①總的來說:可變大小陣列。支援快速隨機訪問。在尾部之外的位置插入或刪除元素可能很慢

②元素儲存在連續的記憶體空間中,因此通過下標取值非常快

③在容器中間位置新增或刪除元素非常耗時

④一旦內從重分配,和原vector相關的指標,引用,迭代器都失效。記憶體重分配耗時很長

二、標頭檔案、using宣告

三、初始化

四、相關操作

1.運算子

v1==v2;//判斷v1和v2是否相等

v1!=v2;//判斷v1和v2是否相等

>、>=、

2.取值

索引取值:v[0],v[1],v[2]....

五、相關函式

vector不支援push_front()和emplace_front()

v.empty();//判斷是否為空,返回布林值

v.size();//返回容器中的元素個數

v.max_size();//返回容器的容量

v.front();//得到頭元素

v.back();//得到尾元素

v.at(int i);//得到下標i處的元素,若下標越界,會丟擲異常

v1.swap(v2);//將v1和v2進行交換。容器的成員函式版本

swap(v1,v2);//同上。系統函式版本

assign(iter1,iter2);//將容器元素更換為乙個迭代器的區間元素

assign(n,t);//將容器元素變為n個t元素

v.insert(iter,t);//在迭代器iter處插入t。返回所插位置處的迭代器

v.insert(v.end(),10,t);//在容器v的末尾插入10個元素,每個元素都是t。返回新新增元素的第乙個元素的迭代器

v.insert(v.end(),);//將後面花括號的每個元素插入容器v的尾部。返回新新增元素的第乙個元素的迭代器

v.insert(v.begin(),v2.end()-2,v2.end());//將容器v2的最後兩個元素插入容器v的頭部。返回新新增元素的第乙個元素的迭代器

注意:上面這個用法,後面兩個引數不能為自身容器的範圍(v.insert(v.begin(),v.end()-2,v.end());是錯誤的)

//利用insert的返回值,下面**為一直在lst容器的頭部插入元素(類似於push_front的功能)

vector v;

auto iter=lst.begin();

while(cin>> word)

iter=v.insert(iter,word);//insert函式每回執行完,返回容器的首元素位置

//vector不支援pop_front

v.push_back(t);//尾部追加元素t

v.pop_back();//刪除尾元素

v.earse(iter);//刪除迭代器iter所指位置處的元素。返回刪除位置處後乙個元素迭代器

v.erase(iter1,iter2);//刪除迭代器iter1與iter2區間內的元素。返回刪除最後乙個元素的後乙個元素迭代器

v.clear();//清空容器,重新初始化容器

程式設計客棧

v.resize(n);//將容器v的元素變為n個。若n原始元素個數,刪除多於元素。若n>原始元素個數,則用預設初始值初始化容器

v.resize(n,t);//將容器元素變為n個t。與容器原始個數無關

vector v(5,666);

v.resize(3);//v內有3個元素,都是666

v.resize(8);;//v內有8個元素,前5個個是666,後3個都是0(預設)

v.resize(10,666)whccbirsf;//v內有10個元素,都是666

//vector不支援emplace_front();

//下面的兩個函式,是在記憶體中建立乙個物件,然後新增進相應的位置

v.empalce(iter,args);//在容器v的位置新增建立乙個args物件

v.emplace_back(args);//在容器v的尾部新增建立乙個args物件 例如

class a;

int main()

v.capacity();//返回當前容器的容量(總共能存多少個)

為容器v重新分配n個記憶體空間(如果n<=當前容器大小,則什麼都不做)

六、容器操作使迭代器、引用、指標www.cppcns.com失效

1.概念:向容器中新增或者刪除元素可能會使容器的迭代器、引用、指標失效。失效的迭代器、引用、指標不再表示任何元素,使用起來非常危險

2.新增元素

3.刪除元素

刪除元素之前的迭代器、引用、指標有效,之後的失效

七、vector是如何增長的

1.概念

vector是可變長的陣列,當向其中增加元素時,如果空間已滿,回自動申請乙個新的空間,並將原來的空間釋放,使指向原來空間的指標指向於新空間

2.方法:vector增長是有規律的,可以通過乙個公式描述

C STL之順序容器

容器,置物之所也!研究資料的特定排列方式,以利於搜尋或排序或其它特殊目的,這一專門學科我們稱為資料結構 data structures 容器即是運用最廣的一些資料結構實現出來的!常見的資料結構有陣列 array 鍊錶 list 堆疊 stack 佇列 queue 樹 tree 雜湊表 hash ta...

c STL容器之map容器

1.map中所有的元素都是pair 2.pair元素中第乙個元素為key,第二個元素為value 3.所有元素都會根據鍵值自動排序 4.map中不允許有重複的鍵,multimap中允許有重複的鍵 優點 可以根據key快速的找到value 一 建構函式 mapmp map const map mp 二...

c STL容器之deque容器

deque是雙端陣列。deque和vector的區別 deque內部工作原理 deque內部有個中控器,維護每段緩衝區中的內容,緩衝區中存放著真實資料。中控器維護的是每個緩衝區的位址,使得使用每個deque時像一塊連續的記憶體空間。deque容器的迭代器是支援隨機訪問的。一 deque建構函式 de...