vector是一個能夠存放任意類型的動態數組,能夠增加和壓縮數據。使用vector 需要在頭文件中增加 #include <vector>
vector其實是一個模板,我們在使用時必須指定元素的類型,如聲明一個int類型的vector,
vector<int> test; //聲明一個int類型的vector叫test。
vector初始化:
vector<int> test(10,-1); // test初始化爲含有10個元素值爲-1的vector容器。
或 vector<int> test={1,2,3,4}; //test含有元素爲1,2,3,4這4個元素,這是c++新的標準,有的編譯器可能不支持。
如何動態的添加元素到vector中呢?
1. push_back() // 使用vector中的成員函數push_back()可以往vector中添加函數。長度不限。
可以通過下標修改、訪問指定位置的元素,如test[2]訪問vector中的第3個元素,與數組類似。
或
通過迭代器訪問修改vector中的元素,如
vector<int>::iterator it;
for(it=test.begin();it!=test.end();it++) //vector中的begin()成員函數獲得第一個元素,end()獲得最後一個函數。
cout<<*it<<" "; // 輸出vector中的所有元素。 這裏也可以修改元素的值 如 *it=10,將元素的值改爲10;
2. at(int index) // 獲得指定下標的元素。
3. size() // 獲得vector的元素的個數。
4. empty() // 判斷vector是否爲空,爲空返回true。
5. erase() // 從指定容器刪除指定位置的元素或某段範圍內的元素,指向的是刪除元素的下一個元素。返回值是一個迭代器.
特別注意:
如vector中有: 3 10 10 6 9 15
一一遍歷容器找到元素值爲10,然後一一刪除
- for(Iter = v1.begin(); Iter != v1.end(); Iter++)
- {
- if(*Iter == 10)
- {
- v1.erase(Iter); //這裏可能會出現錯誤(當調用erase()後Iter迭代器就失效了,變成了一野指針。)最好還是採用下面修改後的方式,
- }
- }
- for(Iter = v1.begin(); Iter != v1.end(); Iter++)
- {
- if(*Iter == 10)
- {
- Iter = v1.erase(Iter);//Iter爲刪除元素的下一個元素的迭代器
- }
- }
注意:這裏只刪除了一個10,原因是erase函數返回的是刪除元素的下一個元素,然後這後面還有Iter++,所以就跳過了後面那個10.
clear() // 移除容器中所有數據。
pop_back()
// 刪除最後一個數據。
insert(pos,elem)
// 在pos位置插入一個elem拷貝,傳回新數據位置。
c1.swap(c2)
swap(c1,c2) // 將c1和c2元素互換。
vector提供了erase(),pop_back(),clear()來刪除數據。
溫馨提示: 對於list刪除元素可以使用remove方法。
例子如下:
list<int> a;
a.push_back(1);a.push_back(6);
a.push_back(3);
a.push_back(6);
a.push_back(6);
a.push_back(2);
list<int>::iterator itor;
a.remove(6);
for(itor=a.begin();itor!=a.end();itor++)
cout<<*itor<<" ";