C STL常用容器總結之三 向量vector

2021-07-22 01:33:21 字數 2814 閱讀 3640

vector是同一種型別的物件的集合,每個物件都有乙個對應的整數索引值。vector的資料安排及操作方式與array非常相似,唯一的差別在於array是靜態空間,一旦配置了就不能改變;vector是動態空間,隨著元素的加入,它的內部機制會自行擴充空間以容納新元素。

使用vector之前,必須包含相應的標頭檔案和命名空間:

#include 

using

std::vector

vector不是一種資料型別,而只是乙個類模版,可以用來定義多種資料型別。在定義了vector物件之後,vector型別的每一種都指定了其儲存元素的型別。例如:使用的vector和vector都是資料型別。

vector

vec1; // v1儲存型別為type的物件,預設建構函式,v1為空

vector

vec2(size); // v2含有值初始化的元素的size個副本

vector

vec3(size,value); // v3包含值為value的size個元素

vector

vec4(myvector); // v4是myvector的乙個副本

vector

vec5(first,last); // 用迭代器first和last之間的元素建立v5

vector賦值不可像陣列一樣使用花括號顯示初始化,但可借用陣列來初始化。

int

array[ ]=;

vector

vec(array, array+7); // 相當於使用begin end 此時vec中的元素也是1234567

v.empty():如果v為空,則返回true,否則返回false。

v.size():返回v中元素的個數。

v.push_back(t):在v的末尾增加乙個值為t的元素。

v[n]:返回v中位置為n的元素。

v1=v2:把v1的元素替換成v2中元素的副本。

v1==v2:如果v1與v2相等,則返回true。

!=, <, <=, >, >=:保持這些操作符慣有的含義。

vector的下標操作符接受乙個值,並返回vector中的該對應位置的元素。vector元素的位置從0開始,使用vector::size_type作為下標的型別。下標操作不能新增元素,只能獲取已存在的元素,想在vector中插入元素,使用push_back()函式。也就是說,必須是已存在的元素才能用下標操作符進行索引,通過下標操作符進行賦值時,不會新增任何元素。下標操作符[ ]僅能提取確實已存在的元素。

因為容器受容器元素型別的約束,所以可定義元素是容器型別的容器。例如,可以定義 vector 型別的容器 lines,其元素為 string 型別的 vector 物件:

vector

< vector

> lines;

// 這裡需要特別說明的是c++11中已經不在使用兩個空格隔開相鄰的》符號

宣告容器的容器,必須用空格隔開兩個相鄰的 > 符號,以示這是兩個分開的符號,否則,系統會認為 >> 是單個符號,為右移操作符,並導致編譯時錯誤。

vector

> mat(3, vector

(4));

mat含有3個元素,每個元素是含有4個int值的向量,mat.size()是3 ,即3行。這個用法即相當於乙個2維陣列。

這裡我們以vectorc;為例進行說明。

c.max_size():返回向量型別的最大容量(2^30-1=0x3fffffff)

c.size():返回向量中現有元素的個數(<=capacity)。

c.resize(n):調整向量的長度使其能容納n個元素。

c.resize(n,x):把向量的大小改為n,所有新元素的初值賦為x。

c.empty():如果向量為空,返回真。

c.assign(first,last):將迭代器first,last所指定範圍內的元素複製到c 中。

c.assign(num,val):用val的num份副本重新設定c。

c.at(n):等價於下標運算子,返回向量中位置n的元素,因其有越界檢查,故比[ ]索引訪問安全。

c.front():返回向量中第乙個元素的引用。

c.back():返回向量中最後乙個元素的引用。

c.begin():返回向量中第乙個元素的迭代器。

c.rbegin():返回乙個反向迭代器,該迭代器指向容器的最後乙個元素。

c.rend():返回乙個反向迭代器,該迭代器指向容器第乙個元素前面的位置。

c.pop_back():刪除向量最後乙個元素。

c.clear():刪除向量中所有元素。

c.erase(iter):刪除迭代器iter所指向的元素,返回乙個迭代器指向被刪除元素後面的元素。

c.erase(start, end):刪除迭代器start、end所指定範圍內的元素,返回乙個迭代器指向被刪除元素段後面的元素。

c.push_back(x):把x插入到向量的尾部。

c.insert(iter, x):在迭代器iter指向的元素之前插入值為x的新元素,返回指向新插入元素的迭代器。

c.insert(iter,n,x):在迭代器iter指向的元素之前插入n個值為x的新元素,返回void。

c.insert(iter,start,end):把迭代器start和end所指定的範圍內的所有元素插入到迭代器iter所指向的元素之前,返回void。

c.reverse():反轉元素順序。

c.swap(c2):交換2個向量的內容,c和c2 的型別必須相同。

C STL常用容器總結之三 向量vector

vector是同一種型別的物件的集合,每個物件都有乙個對應的整數索引值。vector的資料安排及操作方式與array非常相似,唯一的差別在於array是靜態空間,一旦配置了就不能改變 vector是動態空間,隨著元素的加入,它的內部機制會自行擴充空間以容納新元素。使用vector之前,必須包含相應的...

C STL常用容器總結之一 容器與迭代器

3 本博文僅作學術交流只用,無任何其他用途。言歸正傳,下面開始介紹c 中的stl容器。standard template library,標準模板庫。所謂stl容器,就是將最常用的一些資料結構實現出來。常用的資料結構不外乎陣列array 鍊錶list 樹tree 堆疊stack 佇列queue 雜湊...

C STL常用容器總結之八 對映map

map是鍵 值對的集合,map中的所有元素都是pair,可以使用鍵作為下標來獲取乙個值。map中所有元素都會根據元素的值自動被排序,同時擁有實值value和鍵值key,pair的第一元素被視為鍵值,第二元素被視為實值,同時map不允許兩個元素有相同的鍵值。要使用map物件,必須包含map的標頭檔案 ...