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能夠使用的標準運算子:==,!=,<=,>=,《和》。3、assign() 對vector中的元素賦值要訪問vector中的某特定位置的元素可以使用操作符。
連個vector被認為是相等的,如果:它們具有相同的容量;所有相同位置的元素相等。
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...