标准模板库vector的其它介绍不再描述,这里主要说下删除指定元素的操作,我们以遍历删除指定元素为例,下来看下面的代码:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> m_vec;
m_vec.push_back(1);
m_vec.push_back(2);
m_vec.push_back(1);
m_vec.push_back(1);
m_vec.push_back(3);
cout << "m_vec.size: " << m_vec.size() << endl;
auto iter = m_vec.begin();
while(iter != m_vec.end())
{
if(*iter == 1){
m_vec.erase(iter++);
}
}
cout << "m_vec.size: " << m_vec.size() << endl;
return 0;
}
这个程序编译后运行,只能看到如下打印,然后程序也没有退出,直接死循环了
原因是循环遍历删除vector中的元素时,不能像删除map等容器中的元素一样,使用iter++使迭代器指向容器的下一个元素,需要将iter重新指向容器的起始位置。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> m_vec;
m_vec.push_back(1);
m_vec.push_back(2);
m_vec.push_back(1);
m_vec.push_back(1);
m_vec.push_back(3);
cout << "m_vec.size: " << m_vec.size() << endl;
auto iter = m_vec.begin();
while(iter != m_vec.end())
{
if(*iter == 1){
iter = m_vec.erase(iter);
}else{
iter++;
}
}
cout << "m_vec.size: " << m_vec.size() << endl;
return 0;
}
编译运行后,程序正常退出,运行结果如下: