vector erase 重复删除容器内的指定内容时,使用迭代器(iterator)++的操作应该放到For循环内
来源:互联网 发布:sql server 2016 安装 编辑:程序博客网 时间:2024/04/30 22:29
在使用Vector重复删除容器内的指定内容时,迭代器(iterator)++的操作应该放到For循环内,而不应该放在for循环上。
具体详见代码:
vector<string> vTempNo;
string temp = " 1 2 3 4 ";
for (int i = 0; i < temp.length(); i++)
{
vTempNo.push_back(temp.substr(i, 1));
}
for (std::vector<std::string>::iterator iter = vTempNo.begin(); iter != vTempNo.end();iter++)
{
if (*iter == " ")
{
iter = vTempNo.erase(iter);
}
if (iter == vTempNo.end()) //要控制迭代器不能超过整个容器
{
break;
}
}
for (std::vector<std::string>::iterator iter = vTempNo.begin(); iter != vTempNo.end(); iter++)
{
cout << *iter << endl;
}
输出结果:
空格
1
2
3
4
空格
空格
原因:erase函数生效时,返回下一个迭代器,这时For循环再对迭代器加1,造成判断遗漏。
修改方法:
vector<string> vSeatLineNo;
string temp = " 1 2 3 4 ";
for (int i = 0; i < temp.length(); i++)
{
vSeatLineNo.push_back(temp.substr(i, 1));
}
for (std::vector<std::string>::iterator iter = vSeatLineNo.begin(); iter != vSeatLineNo.end();)
{
if (*iter == " ")
{
iter = vSeatLineNo.erase(iter);
}
else
{
iter++;
}
if (iter == vSeatLineNo.end()) //要控制迭代器不能超过整个容器
{
break;
}
}
for (std::vector<std::string>::iterator iter = vSeatLineNo.begin(); iter != vSeatLineNo.end(); iter++)
{
cout << *iter << endl;
}
- vector erase 重复删除容器内的指定内容时,使用迭代器(iterator)++的操作应该放到For循环内
- 【C++】循环删除vector等容器内的元素
- C++使用STL::vector删除数组内的重复元素
- iterator循环的时候不能有删除操作erase()
- C++程序设计语言练习16.4 使用erase循环删除容器内元素
- 容器erase删除的使用
- 删除顺序容器内元素的操作
- vector的iterator进行erase操作后报错vector iterators incompatible
- STL容器的遍历删除操作erase
- mysql 删除字段内的重复内容只保留一条
- 测试对Vector容器,遍历元素删除满足条件元素,而进行Erase()操作的效率
- vector::erase():容器删除
- vector容器的iterator
- 类内初始化,范围for语句,vector的vector,容器的cbegin和cend
- vector容器中iterator的使用
- map等关联容器 vector等序列容器 如何防止迭代器失效 即erase()的使用
- map等关联容器 vector等序列容器 如何防止迭代器失效 即erase()的使用
- map等关联容器 vector等序列容器 如何防止迭代器失效 即erase()的使用
- HIVE在命令行里执行HQL
- isinstance bool int
- java设计模式--抽象工厂
- 右键显示用sublime打开
- ubuntu之使用phpmyadmin
- vector erase 重复删除容器内的指定内容时,使用迭代器(iterator)++的操作应该放到For循环内
- 计分板
- php用正则判断是否为数字
- jQuery 自学笔记—7 AJAX
- SpringMVC view视图显示 XML JSON
- 深度解析高通RF360移动射频前端解决方案
- 【cocos2d-x官方文档】怎么使用pthread
- JAVA项目(非web项目)部署到windows服务器运行
- 数据库sql server简单的几条命令