STL Vector容器用法

2021-08-15 15:45:05 字數 2696 閱讀 5835

——

以類模板形式封裝的資料結構,用於儲存資料。    標頭檔案

#include

vector是c++標準模板庫中的部分內容,它是乙個多功能的,能夠操作多種資料結構和演算法的模板類和函式庫。

vector之所以被認為是乙個容器,是因為它能夠像容器一樣存放各種型別的物件,簡單地說,vector是乙個能夠存放任意型別的動態陣列,能夠增加和壓縮資料。

vector行為完全是乙個陣列,它的記憶體空間是連續的,只不過這個陣列的大小是可變的。(vector在初始化時會申請一定的空間來儲存資料,一旦所申請的空間不夠用的時候,它會在另乙個地方開闢一塊是原空間兩倍的記憶體空間,再將原空間的元素全部複製到新的空間。所以記憶體空間是連續的)

所有的stl容器都屬於標準命名空間,因此使用容器時必須包含語句:

using namespace std;

vectoriv;           //建立乙個空的vector,iv相當於乙個陣列

//vectoriv;

//iv[0]=1; //×,vector的空間還沒有被分配

vectoriv(n); //建立乙個含有n個元素的vector

//vectorivec(10, -1); // 10個int型別的元素,每個都被初始化為-1

//vectorsvec(10, "hi"); // 10個string型別的元素,每個都被初時化為」hi」

//vectorivec(10); // 10個元素,每個都初始化為0

//vectorsvec(10); // 10個元素,每個都是空string物件

v[0] = 1; //在已有空間內可以任意賦值

vectoriv(n,elem); //建立乙個含有n個元素的vector,每個元素都是elem

vectoriv2(iv1); //建立乙個新的vecor,並將iv1的元素全部複製到iv2

在c++11標準中出現了下面兩種新的初始化方式:

vectorv=;    // v中每個元素被賦了相應的值

vectorw = ;

vectorw = ; //×

vectorx =

//vectorv1(10); // v1有10個元素,每個的值都是0

//vectorv2; // v2有1個元素,該元素的值是10

//vectorv3(10, 1); // v3有10個元素,每個的值都是1

//vectorv6("hi"); // ×,不能使用字串字面值構建vector物件

//vectorv8; // v8有10個值為"hi"的元素

由於目前完全支援c++11標準的編譯器不多,當要對vector賦予不同初值的時候,我們就需要借助陣列的形式來給vector賦予初值。

int arr=;                      //整型

vector< int > ivec(arr,arr+6);

int cnt = sizeof(arr1) / sizeof(int);

vector< int > ivec1(arr1, arr1 + cnt); //vector< int > ivec (begin(arr), end(arr));

string arr3 = ; //string型別

vector< string > ivec3(begin(arr3), end(arr3));

迭代器訪問元素遍歷:

vector::iterator it; //[ɪtə'reɪtə]迭代器

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

cout<<*it可以通過重寫排序比較函式按照降序比較,如下:

bool cmp(const int &a,const int &b)

呼叫時:sort(vec.begin(),vec.end(),cmp),這樣就降序排序。vector的刪除操作用如下方法(避免野指標):it=v.erase(it); 因為v.erase(it)後,it指向不明,變為了野指標,再使用it報錯!

錯誤**:

vector::iterator it = v.begin();

while (it!=v.end())

else itr++; //iter的狀態是不確定的,再進行++,豈有不崩潰的道理!!

}正確**:

vector::iterator it = v.begin();

while (it!=v.end())

else itr++;

}很多人還用到過remove,但是對於很多人不能分清楚remove和erase的區別?

// stl中remove()只是將待刪除元素之後的元素移動到vector的前端,而不是刪除。若要真正移除,需要搭配使用erase()。

// vector中的remove是將等於value的元素放到vector的尾部,但並不減少vector的size。

// vector中erase是刪除掉某個位置position或一段區域(begin,end)中的元素,減少其size。

vector容器用法

1 標頭檔案 include.2 建立vector物件,vector vec 3 尾部插入數字 vec.push back a 4 使用下標訪問元素,cout vector iterator it for it vec.begin it vec.end it cout it 6 插入元素 vec.i...

順序容器用法總結

vector 可變大小陣列 支援快速隨機訪問。在尾部之外的位置插入或刪除元素可能很慢 deque 雙端佇列 支援快速隨機訪問。在頭尾位置插入 刪除速度很快 list 雙向鍊錶 只支援雙向順序訪問。在list中任何位置進行插入 刪除操作速度都很快 forward list 單向鍊錶 只支援單向順序訪問...

vector容器用法詳解

vector類稱作向量類,它實現了動態陣列,用於元素數量變化的物件陣列。像陣列一樣,vector類也用從0開始的下標表示元素的位置 但和陣列不同的是,當vector物件建立後,陣列的元素個數會隨著vector物件元素個數的增大和縮小而自動變化。include stdafx.h include inc...