標準庫型別vector
表示物件的集合,其中所有物件的型別都相同。
它是可變大小的陣列,支援快速隨機訪問。因為 vector "容納著"其他物件,所以也常被稱為容器。
想要使用 vector,必須包含適當的標頭檔案。假定在後續的例子中都進行了如下宣告:
#includeusing namespace std;
//t為容納的資料型別
vectorv1; //v1是乙個空的vector,它容納的元素是t型別的,執行預設初始化
vectorv2(v1); //用v1拷貝構造v2
vectorv2 = v1; //與上一句等價
vectorv3(n,val); //v3包含n個重複元素,每個元素的值都是val
vectorv4(n); //v4包含n個重複執行了值初始化的物件
vectorv5; //v5包含了初始值個數的元素,每個元素都賦予了對應的初始值
vectorv5 = ; //與上一句等價
//用陣列初始化vector
int array=;
vectorv1(array,array+6);
//用memset初始化vector
vectorv2;
memset(v2.data(),0,v2.size()*sizeof(int));
//用成員函式push_back()在尾部新增元素
vectorv;
v.push_back(7);
這樣的操作有點類似於棧結構的入棧操作。
不可避免的,如果vector空間已滿,那麼元素會如何新增進去呢?
這就涉及到了vector的動態變化機制,之後的文章會進行詳細解釋。
vectorv,v1,v2;
//基本操作
v.[n]; //對下標進行索引
v1 = v2; //用v2中元素的拷貝替換v1中的元素
v1 = ; //用列表中元素的拷貝替換v1中的元素
v1 == v2; //v1和v2相等當且僅當他們的元素數量相同且對應位置的元素值都相等
v1 != v2;
//如果v不含任何元素,返回真;否則返回假
v.size(); //返回v中元素的個數
v.capacity(); //返回v的容量大小
v.pop_back(); //刪除v的最後乙個元素
v.clear(); //清空v中的所有元素
v.resize(n); //重新指定v的容量為n
v.reserve(n); //重新指定v的容量為n(如果n不小於當前容量大小)
v1.swap(v2); //交換v1和v2的所有元素
swap(v1,v2); //同上
tip:
注意size()和capacity()函式的區別,前者返回的是已經容納的元素的個數,後者是實際能夠容納多少個元素,通過監視後者值的變化我們可以了解push_back()時容量是如何動態變化的。
在用帶參建構函式對vector進行定義時,可能會出現如下錯誤(在結構體中這樣定義vector也會出現類似報錯)
class a
;
原因在於
vector是封裝的類,在乙個類中定義另乙個類時,會出現這樣的報錯。
這裡在乙個類中定義vector的時候同時呼叫了vector的帶參建構函式進行直接初始化。
解決方案
我們可以將vector的初始化放到建構函式中
class a
}
既然不能使用直接初始化,我們可以使用拷貝式初始化
class a
; vector_data_2 = ;
}
c++ primer 中文版(第五版) Vector模板類的使用
vetcor顧名思義就是乙個向量的容器,該容器中的每個元素都屬於同乙個型別,有點類似於陣列,vetor容器與陣列的不同之處就在於,它具有 動態 的屬性,舉例來說,如果定義了乙個vector容量為10,當你新增第十乙個元素時,他會自己找一篇新的足夠大領土 記憶體 然後搬家 把舊址複製過去 而陣列同志顯...
vector型別介紹
include include using namespace std vector型別介紹 1 vector型別簡介 2 定義和初始化vector物件 3 vector物件上的操作 3.1 for迴圈的進一步理解 int main for auto ss mystr4 4 建立指定數量的元素,有元...
c 標準庫的類模板vector介紹
c 標準庫的類模板vector介紹 下面我根據我的學習情況介紹下標準庫的類模板vector,它代表一種更健壯的資料型別,提供了許多額外的功能。c 標準類庫提供了模板vector,它使得程式設計師能夠建立一種功能強大並且不容易出錯的資料型別。下面以乙個程式的實際例子為例,初識下vector。vecto...