本篇继续学习vector容器,前面学习了vector是一个单端数组。也就是说vector的插入和删除,基本上都是在数组的末端进行。本篇要学习的vector插入和删除的方法就能体现这个特点,最后学习vector的存取操作
1.vector的插入和删除
在vector和插入、删除相关的方法主要有下面几个
push_back(ele); // 尾部插入元素ele
pop_back(); // 删除最后一个元素
insert(const_iterator pos, ele); // 迭代器指向位置pos插入元素ele
insert(const_iterator pos, int count, ele); // 迭代器指向位置pos插入count个元素ele
erase(const_iterator pos); // 删除迭代器指向的元素
erase(const_itrator start, const_iterator end); // 删除迭代器从start到end之间的元素
clear(); //删除容器中所有的元素
先来看看前面两个,尾插法和尾删法的测试代码
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void printVector(vector<int> &v)
{
// for循环迭代器遍历容器内元素
for(vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test01()
{
// vector的插入和删除
vector<int> vec;
// 1 尾部插入元素
vec.push_back(2);
vec.push_back(4);
vec.push_back(6);
vec.push_back(8);
vec.push_back(10);
printVector(vec);
// 2 尾部删除最后一个元素
vec.pop_back();
printVector(vec);
vec.pop_back();
printVector(vec);
}
int main()
{
test01();
system("pause");
return 0;
}
运行结果
再来看看使用迭代器进行指定位置插入元素的两个insert方法基本使用
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void printVector(vector<int> &v)
{
// for循环迭代器遍历容器内元素
for(vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test01()
{
// vector的插入和删除
vector<int> vec;
// 1 尾部插入元素
vec.push_back(2);
vec.push_back(4);
vec.push_back(6);
vec.push_back(8);
vec.push_back(10);
printVector(vec);
// 3 迭代器指向位置pos 插入元素
vec.insert(vec.begin()+1, 233);
printVector(vec);
// 3 迭代器指向位置pos 插入n个ele元素
vec.insert(vec.begin(), 3, 100);
printVector(vec);
}
int main()
{
test01();
system("pause");
return 0;
}
测试结果:
最后来看看删除的几个方法
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void printVector(vector<int> &v)
{
// for循环迭代器遍历容器内元素
for(vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test01()
{
// vector的插入和删除
vector<int> vec;
// 1 尾部插入元素
vec.push_back(2);
vec.push_back(4);
vec.push_back(6);
vec.push_back(8);
vec.push_back(10);
printVector(vec);
// 5 迭代器指向位置元素删除
vec.erase(vec.begin() + 2); // 8进行删除
printVector(vec);
// 6 迭代器指定区间进行删除
vec.erase(vec.begin(), vec.end() - 1);
printVector(vec);
// 7. 清空元素
vec.push_back(9);
vec.clear();
printVector(vec);
}
int main()
{
test01();
system("pause");
return 0;
}
运行结果,注意下面一个空行打印,表示容器为空,已删除全部元素
2.vector的存取操作
存取操作,一般是说容器中某个或某些元素进行取出来,也就是读操作,还可以通过赋值进行修改操作。
主要和存取相关的操作函数原型:
at(int id); // 返回索引id所指的数据
operator[]; // 返回索引id所指的数据
front(); // 返回容器中第一个数据元素
back(); // 返回容器中最后一个数据元素
前面两个在学习string类的时候也有这两个方法,然后这里有取第一个和最后一个元素,有时候第一个和最后一个还是很方便的,通过这样方法。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void printVector(vector<int> &v)
{
// for循环迭代器遍历容器内元素
for(vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test01()
{
// vector存取操作
vector<int> vec;
// 1 尾部插入元素
vec.push_back(2);
vec.push_back(4);
vec.push_back(6);
vec.push_back(8);
vec.push_back(10);
printVector(vec);
// 根据索引查找对应得数据
cout << "索引为2的元素是:" << vec.at(2) << endl;
cout << "索引为2的元素是:" << vec[2] << endl;
// 获取第一个和最后一个元素
cout << "第一个元素是:" << vec.at(0) << endl;
cout << "最后一个的元素是:" << vec[vec.size()-1] << endl;
cout << "第一个元素是:" << vec.front() << endl;
cout << "最后一个的元素是:" << vec.back() << endl;
}
int main()
{
test01();
system("pause");
return 0;
}
上面还给了通过索引来找第一个和最后一个,java一般是同样的