本文整理自 http://www.cplusplus.com/reference/vector/vector/
Vector 是 C++ 中十分重要的一個(gè)容器類(lèi)型尾膊。
官方文檔給出的定義是:
Vectors are sequence containers representing arrays that can change in size.
即可以改變大小的數(shù)組的序列容器。
要使用 vector 類(lèi),必須先包含頭文件 vector:
#include <vector>
接下來(lái)我們來(lái)熟悉 Vector 類(lèi)的成員函數(shù):
- 構(gòu)造函數(shù)
vector(); // 創(chuàng)建一個(gè)空的 vector
vector(int nSize); // 創(chuàng)建一個(gè)元素個(gè)數(shù)為 nSize 的 vector
vector(int nSIze, const value_type& value); // 創(chuàng)建一個(gè)元素個(gè)數(shù)為 nSize 的 vector搏嗡,值均為 value
vector(InputIterator first, InputIterator last); // 將另一個(gè)迭代器類(lèi)型的[first, last) 復(fù)制到 vector 中
vector(const vector& x); // 復(fù)制構(gòu)造函數(shù)罚随,復(fù)制已經(jīng)存在的 vector
~vector() // 析構(gòu)函數(shù)
- vector::operator=
vector& operator= (const vector& x); // 將 x 的所有元素復(fù)制到新容器中训柴,x 元素保留
vector& operator= (vector&& x); // 將 x 的所有元素移動(dòng)到新容器中, x 處于未指定但有效的狀態(tài)
std::vector<int> foo (3,0);
std::vector<int> bar (5,0);
bar = foo;
foo = std::vector<int>();
關(guān)于未指定但有效的狀態(tài):
當(dāng)對(duì)象處于未指定狀態(tài)時(shí),我們可以對(duì)沒(méi)有先決條件的對(duì)象執(zhí)行任何操作。 如果有一個(gè)操作要執(zhí)行的先決條件纱烘,我們不能直接執(zhí)行該操作,因?yàn)槲覀儾恢缹?duì)象的 unspecified-state 是否滿(mǎn)足先決條件祈餐。
一般沒(méi)有前提條件的操作示例:
- 銷(xiāo)毀
- 賦值
- 像 get擂啥,empty,size 這樣的常量觀察者
有前提條件的操作示例:
- 取消引用
- pop_back
- 迭代器類(lèi)型
std::vector<int> myvector; // 定義一個(gè) 空的 vector
for (int i=1; i<=100; i++) myvector.push_back(i); // 為 vector 添加元素
myvector.begin(); // 返回一個(gè)迭代器帆阳,它指向容器 vector 的第一個(gè)元素
myvector.end(); // 返回一個(gè)迭代器哺壶,它指向容器 vector 的最后一個(gè)元素的下一個(gè)位置
myvector.rbegin(); // 返回一個(gè)逆序迭代器,它指向容器 vector 的最后一個(gè)元素
myvector.rend(); // 返回一個(gè)逆序迭代器蜒谤,它指向容器 vector 的第一個(gè)元素前面的位置
// 以下四個(gè)是上面四個(gè)的常量版本
myvector.cbegin();
myvector.cend();
myvector.crbegin();
myvector.crend();
關(guān)于反向迭代器的內(nèi)容山宾,見(jiàn) https://blog.csdn.net/kjing/article/details/6936325
- 容量
myvector.size(); // 返回當(dāng)前容器的容量大小 100
myvector.max_szie(); // 返回當(dāng)前容器最大可承載的元素?cái)?shù)量 1073741823
myvector.capacity(); // 返回容器分配的容量的大小 128
// 改變?nèi)萜鞔笮。怪疄?n
myvector.resize(size type n); // 如果 n 比原來(lái)小鳍徽,則保留前 n 位资锰,刪除后面的元素
myvector.resize((size_type n, const value_type& val); // 如果 n 比原來(lái)大,若提供 val旬盯,則填充台妆;否則值初始化
// 若 n 比原來(lái)的 capacity 還大,則重新分配
myvector.empty(); // 返回容器 size 是否為空
myvector.reserve(size_type n); // 如果 n 比原來(lái)的 capacity 大胖翰,則 capacity 增大為 n接剩,否則無(wú)變化
myvector.shrink_to_fit(); // 將容器的capacity 減小至與它的 size 相匹配,不會(huì)更改 size 和 value
- 獲取元素
myvector[i]; // 返回 myvector 的第 i 個(gè)元素
myvector.at(i); // 返回對(duì)在 i 位置元素的一個(gè)引用
myvector.front(); // 返回對(duì) myvector 首元素的引用
myvector.back(); // 返回對(duì) myvector 末元素的引用
myvector.data(); // 返回一個(gè)直接訪(fǎng)問(wèn) vector 內(nèi)部元素的指針
- 修改
myvector.assign(InputIterator first, InputIterator last); // 新 myvector 的值是可迭代對(duì)象的 [first, last)
myvector.assign(size_type n, const value_type& val); // 新 myvector 有 n 個(gè)元素萨咳,均為 val
myvector.push_back(value_type&& val); // 在 myvector 最后添加一個(gè)新元素懊缺,同時(shí) size + 1
myvector.pop_back(value_type&& val); // 在 myvector 刪除最后一個(gè)元素,同時(shí) size - 1
myvector.insert(const_iterator position, const value_type& val); // 在 position 位置插入新值 val
myvector.insert(const_iterator position, size_type n, const value_type& val); // 在 position 位置插入 n 個(gè)新值 val
myvector.insert(const_iterator position, InputIterator first, InputIterator last); // 在 position 位置插入另一個(gè)迭代對(duì)象[first:last)
myvector,erase(const_iterator position); // 刪除 position 位置的元素
myvector.erase(const_iterator first, const_iterator last); // 刪除 [first,last) 范圍的元素
myvector.swap(vector& x); // 交換,所有東西全部交換
myvector.clear(); // 清除 myvector 里的所有元素鹃两,只留一個(gè)空 vector
有關(guān) allocator 的知識(shí)參見(jiàn)原網(wǎng)址遗座。