一、關於vector
本文默認讀者具有一定的c++基礎,故大致敘述,但保證代碼正確。
vector是一個動態的序列容器,相當於一個size可變的數組。
相比於數組,vector會消耗更多的內存以有效的動態增長。而相比於其他動態序列容器(deques, lists and forward_lists),vector能更快的索引元素(就像數組一樣),而且能相對高效的在尾部插入和刪除元素。如果不是在尾部插入和刪除元素,效率就沒有這些容器高。
當需要使用vector的時候,需要包含頭文件:#include <vector>,一般加上using namespace std;如果不加,則在調用時候必須用std::vector<...>這樣的形式,即在vector前加上std::,這表示運用的是std命名空間下的vector容器。
二、常見用法(以int類型為例)
1.聲明及初始化
vector<int> a; //聲明一個int型向量a
vector<int> a(10); //聲明一個初始大小為10的向量
vector<int> a(10, 1); //聲明一個初始大小為10且初始值都為1的向量
vector<int> b(a); //聲明並用向量a初始化向量b
vector<int> b(a.begin(), a.begin()+3); //將a向量中從第0個到第2個(共3個)作為向量b的初始值
int n[] = {1, 2, 3, 4, 5};
vector<int> a(n, n+5); //將數組n的前5個元素作為向量a的初值
vector<int> a(&n[1], &n[4]); //將n[1] - n[4]范圍內的元素作為向量a的初值
2.添加元素
vector<int> a; a.push_back(1); //在尾部加入一個數據 a.push_back(2); a.pop_back(); //刪除最后一個數據 a.insert(a.begin(), 0); //在a.begin()之前加入0 a.erase(a.begin()); //將a.begin()的元素刪除 a.erase(a.begin() + 1, a.end()); //將第二個元素以后的元素均刪除
3.判斷vector是否為空
vector<int> a;
if(a.empty()){
a.push_back(1);
}
4.遍歷訪問vector
vector<int> a; //像數組一樣以下標訪問 for(int i = 0; i < a.size(); i++){ cout << a[i]; } //以迭代器訪問 vector<int>::iterator it; for(it=a.begin(); it!=a.end(); it++){ cout<<*it<<" " ; }
5.排序必須包含algorithm頭文件
#include <algorithm>
vector<int> a;
sort(a.begin(), a.end());
6.以vector實現二維數組
vector<vector<int>> a(10, vector<int>(5)); //創建一個10行5列的int型二維數組 相當於a[10][5];
同理可以創建三維及以上數組,這些多維數組的操作同一維的vector類似。