——
以類模板形式封裝的資料結構,用於儲存資料。 標頭檔案
#include
vector是c++標準模板庫中的部分內容,它是乙個多功能的,能夠操作多種資料結構和演算法的模板類和函式庫。
vector之所以被認為是乙個容器,是因為它能夠像容器一樣存放各種型別的物件,簡單地說,vector是乙個能夠存放任意型別的動態陣列,能夠增加和壓縮資料。
vector行為完全是乙個陣列,它的記憶體空間是連續的,只不過這個陣列的大小是可變的。(vector在初始化時會申請一定的空間來儲存資料,一旦所申請的空間不夠用的時候,它會在另乙個地方開闢一塊是原空間兩倍的記憶體空間,再將原空間的元素全部複製到新的空間。所以記憶體空間是連續的)
所有的stl容器都屬於標準命名空間,因此使用容器時必須包含語句:
using namespace std;
在c++11標準中出現了下面兩種新的初始化方式:vectoriv; //建立乙個空的vector,iv相當於乙個陣列
//vectoriv;
//iv[0]=1; //×,vector的空間還沒有被分配
vectoriv(n); //建立乙個含有n個元素的vector
//vectorivec(10, -1); // 10個int型別的元素,每個都被初始化為-1
//vectorsvec(10, "hi"); // 10個string型別的元素,每個都被初時化為」hi」
//vectorivec(10); // 10個元素,每個都初始化為0
//vectorsvec(10); // 10個元素,每個都是空string物件
v[0] = 1; //在已有空間內可以任意賦值
vectoriv(n,elem); //建立乙個含有n個元素的vector,每個元素都是elem
vectoriv2(iv1); //建立乙個新的vecor,並將iv1的元素全部複製到iv2
由於目前完全支援c++11標準的編譯器不多,當要對vector賦予不同初值的時候,我們就需要借助陣列的形式來給vector賦予初值。vectorv=; // v中每個元素被賦了相應的值
vectorw = ;
vectorw = ; //×
vectorx =
//vectorv1(10); // v1有10個元素,每個的值都是0
//vectorv2; // v2有1個元素,該元素的值是10
//vectorv3(10, 1); // v3有10個元素,每個的值都是1
//vectorv6("hi"); // ×,不能使用字串字面值構建vector物件
//vectorv8; // v8有10個值為"hi"的元素
int arr=; //整型
vector< int > ivec(arr,arr+6);
int cnt = sizeof(arr1) / sizeof(int);
vector< int > ivec1(arr1, arr1 + cnt); //vector< int > ivec (begin(arr), end(arr));
string arr3 = ; //string型別
vector< string > ivec3(begin(arr3), end(arr3));
迭代器訪問元素遍歷:
vector::iterator it; //[ɪtə'reɪtə]迭代器
for(it=vec.begin();it!=vec.end();it++)
cout<<*it可以通過重寫排序比較函式按照降序比較,如下:
bool cmp(const int &a,const int &b)
呼叫時:sort(vec.begin(),vec.end(),cmp),這樣就降序排序。vector的刪除操作用如下方法(避免野指標):it=v.erase(it); 因為v.erase(it)後,it指向不明,變為了野指標,再使用it報錯!
錯誤**:
vector::iterator it = v.begin();
while (it!=v.end())
else itr++; //iter的狀態是不確定的,再進行++,豈有不崩潰的道理!!
}正確**:
vector::iterator it = v.begin();
while (it!=v.end())
else itr++;
}很多人還用到過remove,但是對於很多人不能分清楚remove和erase的區別?
// stl中remove()只是將待刪除元素之後的元素移動到vector的前端,而不是刪除。若要真正移除,需要搭配使用erase()。
// vector中的remove是將等於value的元素放到vector的尾部,但並不減少vector的size。
// vector中erase是刪除掉某個位置position或一段區域(begin,end)中的元素,減少其size。
vector容器用法
1 標頭檔案 include.2 建立vector物件,vector vec 3 尾部插入數字 vec.push back a 4 使用下標訪問元素,cout vector iterator it for it vec.begin it vec.end it cout it 6 插入元素 vec.i...
順序容器用法總結
vector 可變大小陣列 支援快速隨機訪問。在尾部之外的位置插入或刪除元素可能很慢 deque 雙端佇列 支援快速隨機訪問。在頭尾位置插入 刪除速度很快 list 雙向鍊錶 只支援雙向順序訪問。在list中任何位置進行插入 刪除操作速度都很快 forward list 單向鍊錶 只支援單向順序訪問...
vector容器用法詳解
vector類稱作向量類,它實現了動態陣列,用於元素數量變化的物件陣列。像陣列一樣,vector類也用從0開始的下標表示元素的位置 但和陣列不同的是,當vector物件建立後,陣列的元素個數會隨著vector物件元素個數的增大和縮小而自動變化。include stdafx.h include inc...