vector是同一種型別的物件的集合,每個物件都有乙個對應的整數索引值。vector的資料安排及操作方式與array非常相似,唯一的差別在於array是靜態空間,一旦配置了就不能改變;vector是動態空間,隨著元素的加入,它的內部機制會自行擴充空間以容納新元素。
使用vector之前,必須包含相應的標頭檔案和命名空間:
#include using std::vector
vector不是一種資料型別,而只是乙個類模版,可以用來定義多種資料型別。在定義了vector物件之後,vector型別的每一種都指定了其儲存元素的型別。例如:使用的vector和vector都是資料型別。
vectorvec1; // v1儲存型別為type的物件,預設建構函式,v1為空
vectorvec2(size); // v2含有值初始化的元素的size個副本
vectorvec3(size,value); // v3包含值為value的size個元素
vectorvec4(myvector); // v4是myvector的乙個副本
vectorvec5(first,last); // 用迭代器first和last之間的元素建立v5
vector賦值不可像陣列一樣使用花括號顯示初始化,但可借用陣列來初始化。
int array[ ]=;
vectorvec(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的標頭檔案 ...