c++顺序容器vector用法
順序容器概述
一個(gè)容器就是一些特定類型的集合。順序容器為程序員提供了控制元素存儲(chǔ)和訪問(wèn)順序的能力。這種順序不依賴元素的值,而是與元素加入容器時(shí)的位置相對(duì)應(yīng)。所有的順序容器都提供了快速訪問(wèn)元素的能力。順序容器類型有幾種:vector、deque、list、forward_list、array、string。在C++vector容器應(yīng)該是最常用的,使用vector是最好的選擇,下面我們就來(lái)講講他的一些用法。
vector知識(shí)一覽
簡(jiǎn)單地說(shuō),vector是一個(gè)能夠存放任意類型的動(dòng)態(tài)數(shù)組,能夠增加和壓縮數(shù)據(jù)。因?yàn)槭莿?dòng)態(tài)數(shù)組,當(dāng)程序員無(wú)法知道自己需要的數(shù)組的規(guī)模多大時(shí),用其來(lái)解決問(wèn)題可以達(dá)到最大節(jié)約空間的目的。vector也是一個(gè)類模板(class template)。模板允許程序員編寫單個(gè)類或函數(shù)定義,這個(gè)類和函數(shù)定義可用于不同的數(shù)據(jù)類型上。因此,我們可以定義保存string對(duì)象的vector,或保存int值的vector,又或是保存自定義的類類型對(duì)象(如Sales_item對(duì)象)的vector。首先要使用vector,我們必須知道他是在哪里聲明的,以及他在什么域里面。
一、初步引入:
1、包含相應(yīng)頭文件
#include<vector>- 1
2、vector屬于std命名域,使用全局命名域方式
using namespace std;- 1
或者使用 using std::vector;?
vector容器提供了很多接口,在下面的表中列出vector容器操作。
二、容器操作
1、創(chuàng)建vector對(duì)象,必須說(shuō)明vector保存何種對(duì)象的類型,通過(guò)將類型放在類模板名稱后面的尖括號(hào)中來(lái)指定類型,類型可以是用戶自己定義的類型,也可以是常見類型,例如:
vector<int> vec;- 1
上面相當(dāng)于創(chuàng)建了一個(gè)整形數(shù)組vec[],這是一個(gè)動(dòng)態(tài)的數(shù)組。沒(méi)有指明數(shù)組大小。注意vector不是一種數(shù)據(jù)類型,而只是一個(gè)類模板。
2、對(duì)象的初始化,例如:
vector<int> vec;//默認(rèn)構(gòu)造函數(shù)vec為空 vector<int> vec1(vec);//vec1是vec的一個(gè)副本 vector<int> vec2(10,1);//10個(gè)int型元素,每個(gè)都初始化為1 vector<string> vec3(10);//10個(gè)string型元素,每個(gè)都是空string- 1
- 2
- 3
- 4
3、幾個(gè)重要操作,首先先建立一個(gè)vector對(duì)象
vector<int> vec;- 1
添加元素
vec.push_back(a) //在數(shù)組的最后添加一個(gè)數(shù)據(jù)a
vec.insert(pos,elem) //在pos位置插入一個(gè)elem拷貝,傳回新數(shù)據(jù)位置
vec.insert(vec.begin()+i,a);在第i+1個(gè)元素前面插入a;
刪除元素
vec.pop_back() //刪除數(shù)組的最后一個(gè)數(shù)據(jù)
vec.erase(pos) //刪除pos位置的數(shù)據(jù),傳回下一個(gè)數(shù)據(jù)的位置
vec.erase(vec.begin()+2);刪除第3個(gè)元素
vec.erase(vec.begin()+i,vec.end()+j);刪除區(qū)間[i,j-1];區(qū)間從0開始
vec.clear() //刪除vec中所有元素,返回void
vec向量的大小
vec.size() //返回容器中實(shí)際數(shù)據(jù)的個(gè)數(shù)。
vec.empty() //判斷vector是否為空,里面有數(shù)據(jù)返回false,否則返回true
獲取迭代器
vec.begin() //返回vec的首元素
vec.end() //返回尾元素之后元素的位置,即最后一個(gè)單元+1的指針
vec.rbegin() //將vector反轉(zhuǎn)后的開始指針?lè)祷?其實(shí)就是原來(lái)的end()-1)
vec.rend() //將vector反轉(zhuǎn)構(gòu)的結(jié)束指針?lè)祷?其實(shí)就是原來(lái)的begin-1)
訪問(wèn)vector中的數(shù)據(jù)
第一種方式 vec.at(index) //函數(shù)和[]函數(shù)使用可以說(shuō)是一模一樣. 都是為了訪問(wèn)對(duì)應(yīng)index中存儲(chǔ)的數(shù)據(jù), 如果index大于vector的size. 兩者都是拋出out_of_range的exception.
第二種方式 vector::operator[]?
operator[]主要是為了與C語(yǔ)言進(jìn)行兼容。它可以像C語(yǔ)言數(shù)組一樣操作,由于operator[]容易造成一些錯(cuò)誤,所有我們很少用它
vector其他成員函數(shù)
vec.assign(beg,end) //將[beg; end)區(qū)間中的數(shù)據(jù)賦值給c。
vec.assign(n,elem) //將n個(gè)elem的拷貝賦值給c。
vec.back() //傳回最后一個(gè)數(shù)據(jù),不檢查這個(gè)數(shù)據(jù)是否存在。
vec.front() //傳回地一個(gè)數(shù)據(jù)。
vec.swap(b) //交換vec和b中元素
- swap(a,b) //和vec.swap(b)一樣
聯(lián)系拓展
平時(shí)用到vector時(shí)候,很多情況下會(huì)涉及到排序的問(wèn)題。對(duì)于C++的排序,c++標(biāo)準(zhǔn)庫(kù)里有排序函數(shù)。排序函數(shù)sort()就是最常用的。其在頭文件為:
#include<algorithm>- 1
sort()函數(shù)有3個(gè)參數(shù):
第一個(gè)是要排序的數(shù)組的起始地址
第二個(gè)是結(jié)束的地址(最后一位要排序的地址)
第三個(gè)參數(shù)是排序的方法,可以是從大到小也可是從小到大,還可以不寫第三個(gè)參數(shù),此時(shí)默認(rèn)的排序方法是從小到大排序
sort(vec.begin(),vec.end());(默認(rèn)是按升序排列,即從小到大)。
如果我們想按照自己方法排序,那么我們可以通過(guò)重寫排序比較函數(shù)按照降序比較,例如按照降序排序,如下:
定義排序比較函數(shù):
bool Compare(const int &a,const int &b)?
{?
return a>b;?
}?
調(diào)用時(shí):sort(vec.begin(),vec.end(),Compare),這樣就降序排序。
總結(jié)
以上是生活随笔為你收集整理的c++顺序容器vector用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: fin.is_open()与fin.op
- 下一篇: SIM卡初始化