1、vector 簡介
-
作用:它能夠像容器一樣存放各種類型的對象,簡單地說,vector是一個能夠存放任意類型的動態數組,能夠增加和壓縮數據。
-
vector在C++標準模板庫中的部分內容,它是一個多功能的,能夠操作多種數據結構和算法的模板類和函數庫。
容器特點
- 序列容器中的元素按嚴格的線性順序排序。各個元素按其在此序列中的位置進行訪問。
- 甚至可以通過指針算術直接訪問序列中的任何元素,並在序列末尾提供相對快速的元素添加/刪除。
- 容器使用分配器對象動態處理其存儲需求。
2、問題
2.1 賦值
將一個vector的內容賦值給另一個vector
- 1、 聲明
vector v1(v2); - 2、將兩個容器內的元素交換, 需要構建臨時對象,一個拷貝構造,兩次賦值操作。
vector v1();v1.swap(v2); - 3、 將v2賦值給v1 但會清除掉v1以前的內容
v1.assign(v2.begin(), v2.end()); - 4、聲明迭代器
vector::iterator it;
for(it = v2.begin();it!=v2.end();++it){//遍歷v2,賦值給v1 效率慢
v1.push_back(it); } - 5、 等號賦值,最簡單
v1 = v2 - 6、追加,將一個容器中的內容追加到另一個容器的後面:
std::vector v1, v2 ;
v1.insert(v1.end(), v2.begin(), v2.end());
2.2 刪除
- iterator erase(iterator it):刪除向量中迭代器指向元素
- iterator erase(iterator first,iterator last):刪除向量中[first,last)中元素
- void pop_back():刪除向量中最後一個元素
- void clear():清空向量中所有元素
// erasing from vector
#include <iostream>
#include <vector>
int main ()
{
std::vector<int> myvector;
// set some values (from 1 to 10)
for (int i=1; i<=10; i++) myvector.push_back(i);
// erase the 6th element
myvector.erase (myvector.begin()+5);
// erase the first 3 elements:
myvector.erase (myvector.begin(),myvector.begin()+3);
std::cout << "myvector contains:";
for (unsigned i=0; i<myvector.size(); ++i)
std::cout << ' ' << myvector[i];
std::cout << '\n';
return 0;
}
2.3 技巧
- 如果你要表示的向量長度較長(需要爲向量內部保存很多數),容易導致內存泄漏,而且效率會很低;
- Vector作爲函數的參數或者返回值時,需要注意它的寫法:
double Distance(vector&a, vector&b) 其中的“&”絕對不能少!!!