6 C 順序容器之vector

2021-09-17 21:56:09 字數 4108 閱讀 3325

標頭檔案:#include
參考文章:

[1] c++中vector的使用方法

[2] 《c++ primer》

vector是乙個類模板

(1) 尾部插入數字:

#include #include using namespace std;

vectorvec;

string a;

way1:

vec.push_back(a);

/******************************************/

way2:

string str ;

vec.emplace_back(str, 2, 3); //將str索引2~3的子字串新增到vec尾處,2,3缺醒的話則將整個str新增

/******************************************/

for(auto i : vec)

(2) 使用下標訪問元素只能對已存在的元素執行下標操作

#include #include way1:

vectorvec;

cout << vec[0] << endl; //下標是從0開始的:aaa

/****************************************/

way2:

返回vec下標i的引用,可以對原先該位置的元素進行修改

vec.at(0) = ;

注意:對於vector來說,不能使用下標的形式向其中新增元素。因vector要新增的位置是空的,自然也就沒辦法通過下標的形式去訪問這個位置,所以是error。

例如:如下操作是錯誤的

vectorivec;

for(decltype(ivec.size()) i = 0;ix != 10;i++)

ivec[i] = i; //嚴重錯誤,ivec不包含任何元素

(3)使用迭代器訪問元素:

vector::iterator it;

for(it = vec.begin(); it != vec.end(); it++)

cout << *it << endl;

(4)插入元素:在指定迭代器前(例如:str.begin())前插入值為val的元素,返回指向這個元素的迭代器在指定迭代器前(例如:str.begin())插入n個值為val的元素 ,返回指向這個元素的迭代器在指定迭代器前(例如:str.begin())插入區間[start, end)的所有元素 ,返回指向這個元素的迭代器

(7)刪除元素:

vec.erase(vec.begin()+2);    //刪除第3個元素

vec.erase(vec.begin()+i,vec.end()+j);刪除區間[i,j-1];區間從0開始

注意刪除元素的時候可能會使得迭代器失效,所以最好不要將迭代器的值賦給某乙個變數,這樣erase之後這個變數就很可能會越界:

vectorstrvec;

auto beg = strvec.end();

for(auto i : strvec)

strvec.erase(strvec.begin()+1);

cout << *beg << endl;

(8)向量大小:

vec.size();
(9)清空:

vec.clear();
(10)reverse:作用:將元素翻轉(需要標頭檔案#include)

#include reverse(vec.begin(),vec.end());    //將元素翻轉,即逆序排列
在vector中,如果乙個函式中需要兩個迭代器,一般後乙個都不包含

(11)使用sort排序(公升序

):(需要標頭檔案#include)

#include sort(vec.begin(),vec.end());    //預設是按公升序排列,即從小到大
降序比較:可以通過重寫排序比較函式實現降序比較,如下:

#inlcude #include vectornum = ;

sort(num.begin(),num.end(),greater()); //整型陣列降序排序

vectorstr;

sort(str.begin(),str.end(),greater()); //字串陣列降序排序

(12)find查詢函式函式形式:

vector::iterator it = find(vecnum.begin(),vecnum.end(),targetnumber);
vectorrarray;

cout << getmid(rarray,num) << endl;

auto it = find(rarray.begin(),rarray.end(),(double)103);

if(it != rarray.end())

cout << *it << endl;

C 動態順序容器vector

c 動態順序容器vector 1.vector簡介 vector是c 標準模板庫中的部分內容,是模板類函式。之所以稱它為容器,是因為它能容納多種資料型別的物件。vector是順序容器,容器中的元素按照嚴格的線性順序排列,根據位置下標來儲存和訪問元素。同時它也是動態陣列,空間運用比較靈活,隨著元素加入...

順序容器 vector

一 底層實現 vector就是動態陣列.它也是在堆中分配記憶體,元素連續存放,有保留記憶體,如果減少大小後,記憶體也不會釋放.如果新值 當前大小時才會再分配記憶體.它擁有一段連續的記憶體空間,並且起始位址不變,因此它能非常好的支援隨即訪問,即操作符,但由於它的記憶體空間是連續的,所以在中間進行插入和...

順序容器vector

vector的關鍵在於其對大小的控制以及重新配置時的資料搬移效率。由於vector維護的是乙個連續線性空間,所以不論元素類別,普通指標都可以作為vector的迭代器而滿足必要條件,包括隨機訪問 操作符 等操作行為。vector提供的是random access iterators。typedef v...