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ù)組。
容器特性
- 順序序列
順序容器中的元素按照嚴(yán)格的線性順序排序??梢酝ㄟ^元素在序列中的位置訪問對應(yīng)的元素。 - 動(dòng)態(tài)數(shù)組
支持對序列中的任意元素進(jìn)行快速直接訪問,甚至可以通過指針?biāo)闶鲞M(jìn)行該操作。操供了在序列末尾相對快速地添加/刪除元素的操作。 - 能夠感知內(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. 看著清楚
push_back在數(shù)組的最后添加一個(gè)數(shù)據(jù)pop_back去掉數(shù)組的最后一個(gè)數(shù)據(jù)at得到編號位置的數(shù)據(jù)begin得到數(shù)組頭的指針end得到數(shù)組的最后一個(gè)單元+1的指針front得到數(shù)組頭的引用back得到數(shù)組的最后一個(gè)單元的引用max_size得到vector最大可以是多大capacity當(dāng)前vector分配的大小size當(dāng)前使用數(shù)據(jù)的大小resize改變當(dāng)前使用數(shù)據(jù)的大小,如果它比當(dāng)前使用的大,者填充默認(rèn)值reserve改變當(dāng)前vecotr所分配空間的大小erase刪除指針指向的數(shù)據(jù)項(xiàng)clear清空當(dāng)前的vectorrbegin將vector反轉(zhuǎn)后的開始指針返回(其實(shí)就是原來的end-1)rend將vector反轉(zhuǎn)構(gòu)的結(jié)束指針返回(其實(shí)就是原來的begin-1)empty判斷vector是否為空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;
}//迭代器法