vector容器型別

2021-08-31 09:06:10 字數 1803 閱讀 1563

vector容器是乙個模板類,可以存放任何型別的物件(但必須是同一類物件)。vector物件可以在執行時高效地新增元素,並且vector中元素是連續儲存的。

vector的構造

函式原型:

templateexplicit vector(); // 預設建構函式,vector物件為空 explicit vector(size_type n, const t& v = t()); // 建立有n個元素的vector物件 vector(const vector& x); vector(const_iterator first, const_iterator last);

注:vector容器內存放的所有物件都是經過初始化的。如果沒有指定儲存物件的初始值,那麼對於內建型別將用0初始化,對於類型別將呼叫其預設建構函式進行初始化(如果有其它建構函式而沒有預設建構函式,那麼此時必須提供元素初始值才能放入容器中)。

舉例:vectorv1; // 建立空容器,其物件型別為string類vectorv2(10); // 建立有10個具有初始值(即空串)的string類物件的容器vectorv3(5, "hello"); // 建立有5個值為「hello」的string類物件的容器vectorv4(v3.begin(), v3.end()); // v4是與v3相同的容器(完全複製)

vector的操作(下面的函式都是成員函式)bool empty() const; // 如果為容器為空,返回true;否則返回falsesize_type max_size() const; // 返回容器能容納的最大元素個數size_type size() const; // 返回容器中元素個數size_type capacity() const; // 容器能夠儲存的元素個數,有:capacity() >= size()void reserve(size_type n); // 確保capacity() >= nvoid resize(size_type n, t x = t()); // 確保返回後,有:size() == n;如果之前size()、operator>=。

其中,對於operator==和operator!=,如果vector物件擁有相同的元素個數,並且對應位置的元素全部相等,則兩個vector物件相等;否則不等。

對於operator<、operator<=、operator>、operator>=,採用字典排序策略比較。

注:其實只需要實現operator==和operator!=就可以了,其它可以根據這兩個實現。因為,operator!= (lhs, rhs) 就是 !(lhs == rhs),operator<=(lhs, rhs) 就是 !(rhs < lhs),operator>(lhs, rhs) 就是 (rhs < lhs),operator>=(lhs, rhs) 就是 !(lhs, rhs)。

vector類的迭代器

vector類的迭代器除了支援通用的字首自增運算子外,還支援算術運算:it + n、it - n、it2 - it1。注意it2 - it1返回值為difference_type(signed型別)。

注意,任何改變容器大小的操作都可能造成以前的迭代器失效。

應用示例

#include#include#includeusingnamespacestd;intmain()

程式說明:上面程式中用了三個迴圈輸出容器中的元素,每個迴圈的遍歷方式是不一樣的。特別需要說明的是,第二個迴圈在條件判斷中使用了size() 函式,而不是在迴圈之前先儲存在變數中再使用。之所以這樣做,有兩個原因:其一,如果將來在修改程式時,在迴圈中修改了容器元素個數,這個迴圈仍然能很好 地工作,而如果先儲存size()函式值就不正確了;其二,由於這些小函式(其實現只需要一條返回語句)基本上都被宣告為inline,所以不需要考慮效率問題。

vector容器型別

vector容器是乙個模板類,可以存放任何型別的物件 但必須是同一類物件 vector物件可以在執行時高效地新增元素,並且vector中元素是連續儲存的。vector的構造 函式原型 template explicit vector 預設建構函式,vector物件為空 explicit vector...

vector向量容器

vector容器是陣列的乙個泛化推廣,不僅可以像陣列那樣進行元素的隨機訪問,還可以在容器的尾端插入新元素,實現了random access container和back insertion sequence概念。vector具有自動的記憶體管理功能,對於元素的插入和刪除,能夠動態調整占用的記憶體空間...

實現vector容器

在c stl中 每一種容器都有其自己對應的迭代器實現。迭代器也成為了演算法和容器之間的橋梁。今天先模擬一下vector 容器,以及對應的迭代器。一 vector實質是可變長的陣列 空間連續 所謂的可變長其實是偽可變長。為了實現可變長,vector的工作實質 1 初始分配空間大小時,分配按實際需求分配...