Vector (STL)

Vector 是C++标准程式库中的一个类，可视为会自动扩展容量的阵列，以循序（Sequential）的方式维护变数集合。
vector的特色有支持随机存取，在集合尾端增删元素很快，但是在集合中间增删元素比较费时。
vector是C++标准程式库中的众多容器之一。 
vector以模板方式实现，可以保存任意类型的变数，包括使用者自定义的资料型态，例如：它可以是放置整数（int）型态的vector、也可以是放置字串（string）型态的vector、或者放置使用者自定类别（user-defined class）的vector。
设计.
vector 定义于 &lt;vector&gt; 标头档中。与其他STL元件一样，vector 属于std名称空间。
vector是C++标准程式库里最基本的容器，大多数状况下都很有效率。vector设计之初即是为了改善C语言原生阵列的种种缺失与不便，而欲提供一种更有效、更安全的阵列。vector的使用介面刻意模拟C语言原生阵列，较明显的差异在于记忆体管理，原生阵列必须在宣告阵列的时候明确指定阵列长度(例如 int a[5])，但是 vector 不需要指定，而是会在执行期依据状况自我调整长度，动态增大容量。
vector的表现一如资料结构中的阵列，允许随机存取(Random Access)，以索引值(index)存取任一元素只要花费常数时间 O(1)，在集合尾端增加或删除元素也是花费常数时间O(1)，若在vector集合中间增加或删除元素时间复杂度是线性时间O(n)，较为费时。虽然C++标准并没有规定实作方式，但大多数 vector 内部均使用动态阵列方式实作。
成员函式概观.
codice_1 类别是以容器 模式为基准设计的，也就是说，基本上它有 codice_2，codice_3，codice_4，codice_5，codice_6 以及 codice_7 这几个方法。
使用说明.
声明.
使用 vector 之前，必须先 #include&lt;vector&gt;。
声明一个 vector 变数的方法如下:
std::vector&lt;T&gt; v; 
T 是 vector 要储存的物件集合的型别，该 vector 的变数名称是 v。T 可以是任何符合 Copy/Move Assignable 条件的型别，包括使用者自订型别。如果 T 不符合 Copy / Move Assignable 或者复制 / 移动成本很高昂，可以考虑使用 T* 甚至 std::unique_ptr&lt;T&gt; 来代替 T。
取代阵列使用.
int main() {
 std::vector&lt;int&gt; v;
 v.push_back(1);
 v.push_back(2);
 v.push_back(3);
 for(int i=0;i&lt;3;++i)
 std::cout « v[i] « std::endl;
 system("pause");
 return 0;
长度/容量.
以下程式码是用来说明 vector 的长度变化。
//Headers and Macros
using namespace std;
typedef vector&lt;int&gt; Vint;
//利用参照取得真正的 capacity 值
void PrintVectorInfo(Vint&amp; v)
 cout«setw(SETW_1)«"Element"«setw(SETW_2)«"Size";
 cout«setw(SETW_3)«"Capacity"«endl;
 for ( Vint::iterator it = v.begin(); it != v.end(); it ++)
 cout«setw(SETW_1)«(*it)«setw(SETW_2)«v.size();
 cout«setw(SETW_3)«v.capacity()«endl;
 cout«endl;
//Main Function
int main(int argc, char** argv)
 //==START==//
 //宣告一个 vector
 Vint vint;
 //宣告两个整数变数
 int a = 11, b = 22, c = 33;
 //建立只有一个元素空间的 vint
 //把变数 a 复制至第一个元素内
 vint.push_back(a);
 cout«"Push Back: a = "«a«endl;
 //建立两个元素空间的 vint
 //把变数 a 复制至第一个元素内
 //把变数 b 复制至第二个元素内
 //删除上一次建立的 vint
 //上一次建立的 vint 只有一个元素空间
 //依此类推
 vint.push_back(b);
 cout«"Push Back: b = "«b«endl;
 vint.push_back(c);
 cout«"Push Back: c = "«c«endl;
 PrintVectorInfo(vint);
 //移除最后一个元素
 vint.pop_back();
 cout«"Pop Back..."«endl;
 PrintVectorInfo(vint);
 //移除最后一个元素
 vint.pop_back();
 cout«"Pop Back..."«endl;
 PrintVectorInfo(vint);
 //清除所有元素
 vint.clear();
 cout«"Clear All Elements."«endl;
 //==END==//
 system("pause");
 return 0;
string 类型 Vector的使用.
第一种：使用迭代器进行遍历
using namespace std;
int main()
 vector&lt;string&gt; v(3, "I Love Wikipedia "); // 元素个数，每个元素的值相同
 for (vector&lt;string&gt;::const_iterator it = v.begin(); it &lt; v.end(); ++it) // 输出Vector元素
 cout « *it « endl;
 system("pause");
 return 0;
输出结果为：
第二种，与int类型相同
using namespace std;
int main()
 vector&lt;string&gt; vec;
 string str;
 str = "I Love WikiPedia";
 vec.push_back(str);
 vec.push_back("123");
 for(int i = 0; i &lt; vec.size() ; ++i)
 cout « vec[i] « endl;
 system("pause");
 return 0;
输出结果为：
删除元素.
vector 的成员函数 clear() 来删除所有的元素。这个操作并没有改变容器的容量，所以容量不变。
使用 vector 的成员函数 pop_back() 来删除容器尾部的元素。
成员函数 swap()，这个函数用来交换两个 vector 容器中的元素。因此可以与一个具有相同数据类型的内容为空的局部变量swap，从而实现彻底删除元素、释放容量的目的。
成员函数 shrink_to_fit()，会造成容器现有的迭代器都失效。
成员函数 erase() 有2个重载版本：
algorithm 头文件中的std::remove()，可以移除一个范围内匹配特定值的元素。remove() 是一个全局函数，所以它不能删除容器中的元素。会保持未移除的元素的顺序。真正删除需要用erase()成员函数，这叫做 erase-remove。remove() 算法返回的迭代器作为 erase() 的第一个参数，erase() 的第二个参数是所指向容器中最后一个元素后一个位置的迭代器。如：
 words.erase(std::remove(std::begin(words), std::end(words),"none"), std::end(words));