初步認識
模板類vector是一種動態數組,可以在運行程序時設置vector對象的長度,可以動態地進行刪除、添加等操作,可以像訪問數組一樣用[]來訪問某一個元素。在使用vector時,需要包含頭文件
定義模板類vector
如果要定義一個vector並命名爲N,其中每個元素的類型都是int,可以這樣寫:
vector<int> N;
添加元素
可以使用push_back()
方法’向vctor末尾添加元素:
for (int i = 0; i < 5; i++)
{
N.push_back(2*i);
}
元素輸出
可以使用同數組一樣的方法輸出vector:
for (int i = 0; i < N.size(); i++)
{
cout << "the "<<i<<"th number = " << N[i] << endl;
}
獲取vector大小
cout << "size of N = " << N.size() << endl;
清空vector
N1.clear();
cout << "size of N1 = " << N1.size()<<endl;
vector中的迭代器使用
迭代器的作用和指針很像,它使得我們對vector的操作更加靈活。
定義一個迭代器
如果想定一個迭代器並指向上面定義的vector的起始位置,可以這麼寫:
vector<int>::iterator pd;
pd = N.begin();
//auto pd = N.begin(); //C++11自動推斷類型
值得一提的是,c++11中可以直接使用auto
來推斷定義的類型,使定義迭代器更加方便。另外,.begin()
成員函數返回第一個元素的位置,相應的,.end()
返回結尾後一位的位置。這兩個函數在結合迭代器使用非常頻繁。
使用迭代器遍歷vector
auto pd = N.begin();
int j = 0;
for (pd = N.begin(); pd != N.end(); pd++)
{
cout << "the " << j << "th number = " << *pd << endl;
j++;
}
需要注意的是,.end()
返回的是結尾後一位的位置。
刪除vector中指定位置或區域元素
N.erase(N.begin()); //刪除指定位置元素
N.erase(N.begin(), N.begin() + 2); //刪除指定區間元素:N.begin(),N.begin()+1
N.pop_back(); //刪除最後一個位置元素
vector中插入元素
N.insert(N.begin() + 1, 10); //插入單個元素
N.insert(N.begin() + 2, {20, 30}); //插入多個元素
//插入另一個vector中的某一區域元素
vector<int> M;
M.push_back(40);
M.push_back(50);
M.push_back(60);
N.insert(N.begin()+4, M.begin(), M.end());
完整示例代碼
/* main.cpp
描述:C++中vector的基本操作
日期:2017年11月21日
*/
#include <iostream>
#include <vector>
using namespace std;
int main()
{
/*vector基本操作*/
cout << "**************************" << endl;
//定義、添加元素、輸出
vector<int> N;
for (int i = 0; i < 5; i++)
{
N.push_back(2*i);
}
for (int i = 0; i < N.size(); i++)
{
cout << "the "<<i<<"th number = " << N[i] << endl;
}
cout << "size of N = " << N.size() << endl;
//清空
cout << endl;
vector<int> N1 = N;
cout << "size of N1 = " << N1.size()<<endl;
N1.clear();
cout << "size of N1 = " << N1.size()<<endl;
/*vector中的迭代器*/
cout << "**************************" << endl;
//定義迭代器
vector<int>::iterator pd;
pd = N.begin();
//auto pd = N.begin(); //C++11自動推斷類型
//與指針用法類似
for (int i = 0; i < N.size(); i++)
{
cout << "the " << i << "th number = " << *(pd + i) << endl;
}
//利用迭代器遍歷vector
cout << "**************************" << endl;
int j = 0;
for (pd = N.begin(); pd != N.end(); pd++)
{
cout << "the " << j << "th number = " << *pd << endl;
j++;
}
//刪除vector中指定位置或區域元素
cout << "**************************" << endl;
N.erase(N.begin());
N.erase(N.begin(), N.begin() + 2); //N.begin(),N.begin()+1
N.pop_back(); //刪除最後一個位置元素
j = 0;
for (pd = N.begin(); pd != N.end(); pd++)
{
cout << "the " << j << "th number = " << *pd <<endl;
j++;
}
//vector中插入元素
cout << "**************************" << endl;
N.insert(N.begin() + 1, 10); //插入單個元素
N.insert(N.begin() + 2, {20, 30}); //插入多個元素
j = 0;
for (pd = N.begin(); pd != N.end(); pd++)
{
cout << "the " << j << "th number = " << *pd << endl;
j++;
}
//插入另一個vector中的某一區域元素
cout << "**************************" << endl;
vector<int> M;
M.push_back(40);
M.push_back(50);
M.push_back(60);
N.insert(N.begin()+4, M.begin(), M.end());
j = 0;
for (pd = N.begin(); pd != N.end(); pd++)
{
cout << "the " << j << "th number = " << *pd << endl;
j++;
}
cin.get();
return 0;
}
輸出結果