初步认识
模板类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()
返回的是结尾后一位的位置。
扫描二维码关注公众号,回复:
1108706 查看本文章
删除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;
}
输出结果