一、vector類型是什麼
在C語言中,我們可以通過數組定義普通類型數據或自定義類型數據的集合。數組的缺點很明顯,程序員必須提前規定數組的大小,這可能導致兩種結果:長度太小導致不夠用,或者長度太大導致空間浪費。如果要實現可以動態增長的數組,我們就需要使用一些數據結構方面的知識,如鏈表。
C++標準庫提供了vector類型,通過vector類型,我們可以很方便的定義大小可以動態改變的數據集合。
二、vector類型的使用
1. 定義vector對象
vector<int> v1; //定義vector類型的對象v1,v1默認爲空,保存int類型元素
vector<int> v2(v1); //定義vector類型的對象v2,用v1來初始化
vector<int> v3(3); //v3保存了3個值爲0的int元素
vector<string> v4(3); //v4保存了3個值爲空的string元素
vector<T> v5(n,i); //v5保存了n個值爲i的元素
2. 操作vector對象
vector對象的簡單使用如下:
v.push_back(t) 在v末尾添加t
v.pop_back() 刪除v末尾的元素
v[n] 返回v中n處的元素
#include <iostream>
#include <vector>
using namespace std;
//using std::vector;
int main(void)
{
vector<int> myVector;
//動態添加元素
for (vector<int>::size_type i = 0; i != 3 ;i++)
{
myVector.push_back(i);
}
//下標操作
for (vector<int>::size_type i = 0; i != myVector.size();i++)
{
cout<<myVector[i]<<endl;
}
myVector.pop_back();
cout<<endl<<"After pop_back():"<<endl;
for (vector<int>::size_type i = 0; i != myVector.size();i++)
{
cout<<myVector[i]<<endl;
}
}
三、使用iterator訪問vector的元素
1、iterator類型
對vector的元素進行訪問除了使用下標外,還可以使用iterator(迭代器)類型。iterator基本用法如下:
vector<int>::iterator myIter; //定義iterator類型變量
myIter = myVector.begin(); //myIter指向myVector第一個元素
cout<<*myIter<<endl; //解引用操作
myIter++; //myIter指向myVector第二個元素
myIter = myVector.end(); //myIter指向myVector最後一個元素的下一個
cout<<*myIter<<endl; //解引用操作會出現運行時錯誤
2、使用iterator訪問vector元素
在上面的程序末尾添加如下幾行,運行結果如下。可以發現,使用inser()向vector插入元素時,元素插入在了迭代器指向元素的位置,而插入之前的元素順序後移。 vector<int>::iterator myIter;
myIter = myVector.begin();
//插入元素
myVector.insert(myIter,5);
cout<<endl<<"Afer Insert:"<<endl;
for (vector<int>::iterator it = myVector.begin();
it != myVector.end();
it++)
{
cout<<*it<<endl;
}
3、const_iterator和const iterator
vector<int>::const_iterator myIter;
const vector<int>::iterator myIter;
這兩者有什麼區別呢?const_iterator定義的迭代器不能改變它所指向元素的值,而迭代器自身可以改變,即可以指向不同的元素;而const iterator用來定義常量迭代器,它自身不能改變,即只能指向一個元素,而迭代器指向元素的值可以改變。
vector<int>::const_iterator myConstIter1;
myConstIter1 = myVector.begin();
myConstIter1++; //正確,可以指向不同的元素
*myConstIter1 = 1; //錯誤,指向的元素的值不能改變
const vector<int>::iterator myConstIter2 = myVector.begin();
*myConstIter2 = 1; //正確,指向的元素的值可以改變
myConstIter2++; //錯誤,只能指向固定的元素