Vector(向量容器)

2021-09-10 16:38:54 字數 3069 閱讀 1460

vector是乙個線性順序結構。相當於陣列,但其大小可以不預定指定,並且自動擴充套件。它可以像陣列一樣被操作,由於它的特性我們完全可以將vector看作動態陣列。在使用它時, 需要包含標頭檔案include

在建立乙個vector後,它會自動在記憶體中分配一塊連續的記憶體空間進行資料儲存,初始的空間大小可以預先指定也可以由vector預設指定,這個大小即 capacity() 函式的返回值。當儲存的資料超過分配的空間時vector會重新分配一塊記憶體,但這樣的分配是很耗時的,在重新分配空間時它會做這樣的動作:

首先,vector會申請一塊更大的記憶體塊;

然後,將原來的資料拷貝到新的記憶體塊中;

其次,銷毀掉原記憶體塊中的物件(呼叫對戲那個的析構函式);

最後,將原來的記憶體空間釋放掉。

如果vector儲存的資料量很大時,這樣的操作一定會導致糟糕的效能(這也是vector被設計成比較容易拷貝的值型別的原因)。所以說vector不是在什麼情況下效能都好,只有在預先知道它大小的情況下vector的效能才是最優的。

指定一塊如同陣列一樣的連續儲存,但空間可以動態擴充套件。即它可以像陣列一樣操作,並且可以進行動態操作。通常體現在push_back(),pop_bach()。

隨機訪問方便,它像陣列一樣被訪問,即支援[ ]操作符和vector.at()。

節省空間,因為它是連續儲存,在儲存資料的區域都是沒有被浪費的,但是要明確一點vector大多情況下並不是滿存的,在未儲存的區域實際是浪費的。

在內部進行插入、刪除操作效率非常低,這樣的操作基本上是被禁止的。vector被設計成只能在後端進行追加和刪除操作,其原因是vector內部的實現是按照順序表的原理。

只能在vector的最後進行push和pop,不能在vector的頭部進行push和pop。

當動態新增的資料超過vector預設分配的大小時要進行記憶體的重新分配、拷貝與釋放,這個操作非常消耗效能。所以要vector達到最優的效能,最好在建立vector時就指定其空間大小。

vector包含著一系列連續儲存的元素,其行為和陣列類似。訪問vector中的任意元素或從末尾新增元素都可以在常量級時間複雜度內完成,而查詢特定值的元素所處的位置或是在vector中插入元素則是線性時間複雜度。

1、constructors 建構函式

vectorv1; //構造乙個空的vector

vectorv1(5,42); // 構造了乙個包含5個值為42的元素的vector

2、operators 對vector進行賦值或比較

c++ vector能夠使用的標準運算子:==,!=,<=,>=,《和》。

要訪問vector中的某特定位置的元素可以使用操作符。

連個vector被認為是相等的,如果:它們具有相同的容量;所有相同位置的元素相等。

vector之間大小的比較是按照詞典規則。

3、assign() 對vector中的元素賦值

void assign(input_iterator start, input_iterator end); //將區間[start,end)的元素複製到當前vector;

void assign(size_type num, const type &val);//賦num個值為val的元素到vector中,這個函式將會清除掉為vector賦值以前的內容;

4、at() 返回指定位置的元素

type at(size_type loc); //差不多等同於v[i];但比v[i]安全;
5、back() 返回最末乙個元素

6、begin() 返回第乙個元素的迭代器

7、capacity() 返回vector所能容納的元素數量(在不重新分配記憶體的情況下)

8、clear() 清空所有元素

9、empty() 判斷vector是否為空(返回true時為空)

10、end() 返回最末元素的迭代器(實際指向最末元素的下乙個位置)

11、erase() 刪除指定元素

iterator erase(iterator loc); // 刪除loc處的元素

iterator erase(iterator start, iterator end); //刪除start和end之間的元素

12、front() 返回第乙個元素的引用

13、get_allocator() 返回vector的記憶體分配器

14、insert() 插入元素到vector中

iterator insert(iterator loc, const type &val);//在指定位置loc前插入值為val的元素,返回指向這個元素的迭代器

iterator insert(iterator loc, size_type num, const type &val);/在指定位置loc前插入num個值為val的元素

void insert(iterator loc,input_iterator strat, input_iterator end);//在指定位置loc前插入區間[start, end)的所有元素

15、max_size() 返回vector所能容納元素的最大數量(上限)

16、pop_back() 移除最後乙個元素

17、push_back() 在vector最後新增乙個元素

18、rbegin() 返回vector尾部的逆迭代器

19、rend() 返回vector首部的逆迭代器

20、reserve() 設定vector最小的元素容納數量

//為當前vector預留至少工容納size個元素的空間

21、resize() 改變vector元素數量的大小

void resize(size_type size, type val);//改變當前vector的大小為size,且對新建立的元素賦值val
22、size() 返回vector元素數量的大小

23、swap() 交換兩個vector

void  swap(vector & from);

vector向量容器

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

Vector向量容器

vector向量容器優點 1 vector向量容器不但能像陣列一樣對元素進行隨機訪問,還能在尾部插入元素,是一種簡單 高效的容器,完全可以取代陣列。2 vector向量容器具有記憶體自動管理的功能,對於元素的插入和刪除,可動態調整所佔的記憶體空間。3 對於vector容器的容量定義,可以事先定義乙個...

vector向量容器

vector向量容器 include include vector向量容器標頭檔案 include c語言標頭檔案 include 使用sort演算法 using namespace std bool comp int a,int b 自定義函式從大到小排序 int main cin x v.ins...