C++STL容器——vector容器

vector

向量(vector)是動(dòng)態(tài)數(shù)組,在堆中分配內(nèi)存,元素連續(xù)存放,有保留內(nèi)存,如果減少大小后,內(nèi)存也不會(huì)釋放;如果新值大于當(dāng)前大小時(shí)才會(huì)重新分配內(nèi)存。像數(shù)組一樣,vector類也用從0開始的下標(biāo)表示元素的位置;但和數(shù)組不同的是,當(dāng)vector對象創(chuàng)建后,數(shù)組的元素個(gè)數(shù)會(huì)隨著vector對象元素個(gè)數(shù)的增大和縮小而自動(dòng)變化??梢院唵蔚恼J(rèn)為,向量是一個(gè)能夠存放任意類型的動(dòng)態(tài)數(shù)組。

容器特性

  1. 順序序列
    順序容器中的元素按照嚴(yán)格的線性順序排序??梢酝ㄟ^元素在序列中的位置訪問對應(yīng)的元素。
  2. 動(dòng)態(tài)數(shù)組
    支持對序列中的任意元素進(jìn)行快速直接訪問,甚至可以通過指針?biāo)闶鲞M(jìn)行該操作。操供了在序列末尾相對快速地添加/刪除元素的操作。
  3. 能夠感知內(nèi)存分配器的(Allocator-aware)
    容器使用一個(gè)內(nèi)存分配器對象來動(dòng)態(tài)地處理它的存儲(chǔ)需求。

常用函數(shù)

1. 構(gòu)造函數(shù)
  • vector():創(chuàng)建一個(gè)空vector
  • vector(int nSize):創(chuàng)建一個(gè)vector,元素個(gè)數(shù)為nSize
  • vector(int nSize,const t& t):創(chuàng)建一個(gè)vector,元素個(gè)數(shù)為nSize,且值均為t
  • vector(const vector&):復(fù)制構(gòu)造函數(shù)
  • vector(begin,end):復(fù)制(begin,end)區(qū)間內(nèi)另一個(gè)數(shù)組的元素到vector中
2. 增加函數(shù)
  • void push_back(const T& x):向量尾部增加一個(gè)元素X
  • iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一個(gè)元素x
  • iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n個(gè)相同的元素x
    iterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一個(gè)相同類型向量的[first,last)間的數(shù)據(jù)
3. 刪除函數(shù)
  • iterator erase(iterator it):刪除向量中迭代器指向元素
  • iterator erase(iterator first,iterator last):刪除向量中[first,last)中元素
  • void pop_back():刪除向量中最后一個(gè)元素
  • void clear():清空向量中所有元素
4. 遍歷函數(shù)
  • reference at(int pos):返回pos位置元素的引用
  • reference front():返回首元素的引用
  • reference back():返回尾元素的引用
  • iterator begin():返回向量頭指針,指向第一個(gè)元素
  • iterator end():返回向量尾指針,指向向量最后一個(gè)元素的下一個(gè)位置
  • reverse_iterator rbegin():反向迭代器,指向最后一個(gè)元素
  • reverse_iterator rend():反向迭代器,指向第一個(gè)元素之前的位置
5. 判斷函數(shù)
  • bool empty() const:判斷向量是否為空,若為空,則向量中無元素
6. 大小函數(shù)
  • int size() const:返回向量中元素的個(gè)數(shù)
  • int capacity() const:返回當(dāng)前向量張紅所能容納的最大元素值
  • int max_size() const:返回最大可允許的vector元素?cái)?shù)量值
7. 其他函數(shù)
  • void swap(vector&):交換兩個(gè)同類型向量的數(shù)據(jù)
  • void assign(int n,const T& x):設(shè)置向量中第n個(gè)元素的值為x
  • void assign(const_iterator first,const_iterator last):向量中[first,last)中元素設(shè)置成當(dāng)前向量元素
8. 看著清楚
  1. push_back 在數(shù)組的最后添加一個(gè)數(shù)據(jù)
  2. pop_back 去掉數(shù)組的最后一個(gè)數(shù)據(jù)
  3. at 得到編號位置的數(shù)據(jù)
  4. begin 得到數(shù)組頭的指針
  5. end 得到數(shù)組的最后一個(gè)單元+1的指針
  6. front 得到數(shù)組頭的引用
  7. back 得到數(shù)組的最后一個(gè)單元的引用
  8. max_size 得到vector最大可以是多大
  9. capacity 當(dāng)前vector分配的大小
  10. size 當(dāng)前使用數(shù)據(jù)的大小
  11. resize 改變當(dāng)前使用數(shù)據(jù)的大小,如果它比當(dāng)前使用的大,者填充默認(rèn)值
  12. reserve 改變當(dāng)前vecotr所分配空間的大小
  13. erase 刪除指針指向的數(shù)據(jù)項(xiàng)
  14. clear 清空當(dāng)前的vector
  15. rbegin 將vector反轉(zhuǎn)后的開始指針返回(其實(shí)就是原來的end-1)
  16. rend 將vector反轉(zhuǎn)構(gòu)的結(jié)束指針返回(其實(shí)就是原來的begin-1)
  17. empty 判斷vector是否為空
  18. swap 與另一個(gè)vector交換數(shù)據(jù)

實(shí)例

#include<vector>
- vector():創(chuàng)建一個(gè)空vector
- vector(int nSize):創(chuàng)建一個(gè)vector,元素個(gè)數(shù)為nSize
*vector(int nSize,const t& t):創(chuàng)建一個(gè)vector,元素個(gè)數(shù)為nSize,且值均為t
*vector(const vector&):復(fù)制構(gòu)造函數(shù)
*vector(begin,end):復(fù)制[begin,end)區(qū)間內(nèi)另一個(gè)數(shù)組的元素到vector中

//1.定義和初始化
vector<int> a1;    //默認(rèn)初始化,a1為空
vector<int> a2(a1);  //使用a1初始化a2
vector<int> a3(a1.begin(),a1.end());//使用a1初始化a3
vector<int> a4(10);    //10個(gè)值為0的元素
vector<int> a5(10,4);  //10個(gè)值為4的元素
  
//2.常用操作方法
int size = a1.size();         //元素個(gè)數(shù)
bool isEmpty = a1.empty();    //判斷是否為空
cout<<a1[0]<<endl;           //取得第一個(gè)元素
a1.push_back(100);            //尾部添加元素(插入)100
a1.insert(a1.begin(),111);   //在第一個(gè)元素之前插入111  insert begin+n是在第n個(gè)元素之前插入
a1.insert(a1.end(),222);    //在最后一個(gè)元素之后插入222 insert end + n 是在n個(gè)元素之后插入
a1.insert(a1.end(),5,3);    //從a1.back位置插入5個(gè)值為3的元素
a1.pop_back();              //刪除末尾元素
arr.erase(arr.begin());     //刪除 同insert
a1.erase(a1.begin(),a1.begin()+2);//刪除a1[0]-a1[2]之間的元素,不包括a1[2]其他元素前移
cout<<(a1==a2)?true:false;  //判斷是否相等==、!=、>=、<=...
vector<int>::iterator iter = a1.begin();    //獲取迭代器首地址
vector<int>::const_iterator c_iter = a1.begin();   //獲取const類型迭代器
a1.clear();                 //清空元素

//3.遍歷
int length = a1.size();
for(int i=0;i<length;i++)
{
    cout<<a1[i];
}//下標(biāo)法

vector<int>::iterator it = a1.begin();
for(;it != a1.end();it++)
{
    cout<<*it;
}//迭代器法
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容