http://blog.csdn.net/xiejingfa/article/details/8884979
在C++中,通常使用數組來存放一組具有相同數據類型的數據,但是數組在使用前必須先確定其大小。
STL中提供了vector類,即動態數組。既然是數組,vector自然具有數組的一些特徵,比如下標從零開始、
可以通過下標來訪問數組中的數據元素等,不同的是:vector具有容量動態增長的能力,而不像普通數組
一樣其容量一旦確定就不能修改。
下面我們來學習一下vector的基本用法。
vector類爲用戶提供了許多函數,比較常用的有以下:
1、構造函數
- vector()
- //創建一個空的vector對象, T爲vector存放的元素類型(下同)
- vector(int size)
- //創建一個大小爲size的vector對象
- vector(int size, T t)
- //創建一個大小爲size, 各元素值均爲t的vector對象
2、往vector中添加元素
- void push_back(T t)
- //在vector的尾部增加一個元素
- iterator insert(iterator iter, T t)
- //在vector中某一元素前插入一個元素t,iterator爲迭代器
- void insert(iterator iter, int n, T t)
- //在vector中某一元素錢插入n個相同的元素t
- void insert(iterator iter, iterator first, iterator last)
- //在vector中某一元素錢插入另一個相同類型vector中[first, last)間的數據
3、刪除元素
- iterator erase(iterator iter)
- //刪除vector中某一個元素
- iterator erase(iterator first, iterator last)
- //刪除vector中[first, last)中的元素
- void clear()
- //刪除vector中的所有元素
4、遍歷vector
- T at(int i)//返回下標爲i位置的元素
- T front()//返回首元素
- T back()//返回尾元素
- iterator begin()//返回vector的頭指針,指向第一個元素
- iterator end()//返回vector的尾指針,指向最後一個元素的下一個位置
- reverse_iterator rbegin()//反向迭代器,返回最後一個元素的迭代指針
- reverse_iterator rend()//反向迭代器, 返回第一個元素錢一個位置的迭代指針
5、其他
- bool empty()//判斷vector是否爲空
- int size()//返回vector中元素個數
- int capacity()//返回當前vector的最大容量
- void assign(int n, T t)//將vector中第n個元素設置爲t
接下來通過一個具體的例子來看看上述函數的簡單用法
- #include
- #include
- using namespace std;
- int main(void) {
- //初始化vector
- vector<<span class="datatypes" style="margin: 0px; padding: 0px; border: none; color: rgb(46, 139, 87); background-color: inherit; font-weight: bold;">int> int_vec;
- //往vector中插入元素
- int_vec.push_back(1);
- int_vec.push_back(2);
- int_vec.push_back(3);
- int_vec.push_back(4);
- int_vec.push_back(5);
- printf("\n下面測試輸出\n");
- int size = int_vec.size();
- //
- printf("通過數組方式輸出\n");
- for(int i = 0; i < size; i++) {
- printf("%d ", int_vec[i]);
- }
- printf("\n通過引用方式輸出\n");
- for(int i = 0; i < size; i++) {
- printf("%d ", int_vec.at(i));
- }
- printf("\n通過迭代器輸出\n");
- vector<<span class="datatypes" style="margin: 0px; padding: 0px; border: none; color: rgb(46, 139, 87); background-color: inherit; font-weight: bold;">int>::iterator iter1 = int_vec.begin();
- while(iter1 != int_vec.end()) {
- printf("%d ", *iter1);
- iter1++;
- }
- printf("\n通過反向迭代器輸出\n");
- vector<<span class="datatypes" style="margin: 0px; padding: 0px; border: none; color: rgb(46, 139, 87); background-color: inherit; font-weight: bold;">int>::reverse_iterator iter2 = int_vec.rbegin();
- while(iter2 != int_vec.rend()) {
- printf("%d ", *iter2);
- iter2++;
- }
- printf("\n下面測試修改元素\n");
- printf("通過數組下標方式修改第一個元素。");
- int_vec[0] = 5;
- printf("修改後第一個元素爲:%d\n", int_vec[0]);
- printf("通過引用方式修改第二個元素。");
- int &p = int_vec.at(1);
- p = 6;
- printf("修改後的第二個元素爲:%d\n", p);
- printf("通過迭代器修改第三個元素。");
- vector<<span class="datatypes" style="margin: 0px; padding: 0px; border: none; color: rgb(46, 139, 87); background-color: inherit; font-weight: bold;">int>::iterator iter3 = int_vec.begin()+2;
- *iter3 = 7;
- printf("修改後第三個元素爲:%d\n", *iter3);
- printf("\n下面測試刪除元素\n");
- printf("刪除第一個元素後,剩餘元素爲: ");
- int_vec.erase(int_vec.begin());
- for(int i = 0; i < int_vec.size(); i++) {
- printf("%d ", int_vec[i]);
- }
- printf("\n刪除第1~3個元素後,剩餘元素爲: ");
- int_vec.erase(int_vec.begin(), int_vec.begin()+2);
- for(int i = 0; i < int_vec.size(); i++) {
- printf("%d ", int_vec[i]);
- }
- return 0;
- }
輸出:
下面測試輸出
通過數組方式輸出
1 2 3
4 5
通過引用方式輸出
1 2 3
4 5
通過迭代器輸出
1 2 3
4 5
通過反向迭代器輸出
5 4 3
2 1
下面測試修改元素
通過數組下標方式修改第一個元素。修改後第一個元素爲: 5
通過引用方式修改第二個元素。修改後的第二個元素爲: 6
通過迭代器修改第三個元素。修改後第三個元素爲: 7
下面測試刪除元素
刪除第一個元素後,剩餘元素爲: 6
7 4 5
刪除第1~3個元素後,剩餘元素爲: 4 5