Vector

Vector 是C++標準程式庫中的一個Class(類),可視為會自動擴展容量的陣列,以循序(Sequential)的方式維護變數集合。vector的特色有支援隨機存取,在集合尾端增刪元素很快,但是在集合中間增刪元素比較費時。vector是C++標準程式庫中的眾多容器(container)之一。

vector以模板(泛型)方式實現,可以儲存任意類型的變數,包括使用者自訂的資料型態。
例如:它可以是放置整數(int)型態的 vector、也可以是放置字串(string)型態的 vector、或者放置使用者自訂類別(user-defined class)的 vector。
你可以把它想像成是Array 的進階。

導入

1
#include <vector>

創建

vector():創建一個空vector,你要用assign來給他值
vector(int nSize):創建一個vector,元素個數為nSize
vector(int nSize,const t& t):創建一個vector,元素個數為nSize,且值均為t
vector(const vector&):複製構造函數
vector(begin,end):複製[begin,end)區間內另一個數組的元素到vector中

例子:

1
2
3
vector<int> vec1(); // {}
vector<int> vec2(10); // {0,0,0,0,0,0,0,0,0,0}
vector<float> vec3(5,3.14); // {3.14,3.14,3.14,3.14,3.14}

存取元素

vec[i] - 存取索引值為 i 的元素值。
vec.at(i) - 存取索引值為 i 的元素的值,
vec.front() - 回傳 vector 第一個元素的值。
vec.back() - 回傳 vector 最尾元素的值。

例子:

1
2
vec2.at(1) = 10; // {0,10,0,0,0,0,0,0,0,0}
vec2[2] = 99; // {0,10,99,0,0,0,0,0,0,0}

新增或移除元素

vec.push_back() - 新增元素至 vector 的尾端,必要時會進行記憶體配置。
vec.pop_back() - 刪除 vector 最尾端的元素。
vec.insert() - 插入一個或多個元素至 vector 內的任意位置。
vec.erase() - 刪除 vector 中一個或多個元素。
vec.clear() - 清空所有元素。

取得長度/容量

vec.empty() - 如果 vector 內部為空,則傳回 true 值。
vec.size() - 取得 vector 目前持有的元素個數。
vec.resize() - 改變 vector 目前持有的元素個數。
vec.capacity() - 取得 vector 目前可容納的最大元素個數。這個方法與記憶體的配置有關,它通常只會增加,不會因為元素被刪減而隨之減少。

重新配置/重設長度
vec.reserve() - 如有必要,可改變 vector 的容量大小(配置更多的記憶體)。在眾多的 STL 實做,容量只能增加,不可以減少。

Vector 比起 Array 有什麼好?

Vector是模板類,並且僅C++中可以使用。而Array是內置語言構造,同時存在於C和C++中。

Array的大小是固定的,而Vector是可調整大小的,即當Vector在heap memory中分配時,它可以增長和收縮。

Reference

C/C++ - Vector (STL) 用法與心得完全攻略

pointers 和 arrays 對於某些低階任務可能有存在的必要,但我們應該盡量避免使用它們,因為他們容易出錯又很難除錯。一般而言應該優先使用程式庫提供的抽象事物而非語言內建的 array 和 pointer,這一忠告在「多用strings,少用C-Style 字串(亦即以null結尾之字元array)」這件事上尤其合適。

C++ vector用法(详解!!函数,实现)
Wiki- Vector
Advantages of vector over array in C++
C++ vector 容器浅析