我们可以擦除c++11中基于循环的范围内的项目吗
Can we erase the items in range-based for loop in c++11
我想擦除C++11标准容器set
中所有小于v
的项目,这是我的代码:
void delete_less_than(set<int> & ss, int const v) {
for (auto item: ss) {
if (item < v) {
ss.erase(ss.find(item));
} else break;
}
}
代码能正常工作吗?我在我的电脑上看起来不错(g++4.7.3),但在我提交代码的某个在线判断上无限循环。
这不是基于范围的循环的用途。不要使用它;而是使用普通的CCD_ 3循环。只有当您想对容器中的每个元素执行某些操作时,才可以使用基于范围的版本,而不更改容器。
for (auto it = ss.begin(); it != ss.end(); )
{
if (*it < v) { ss.erase(it++); }
else { ++it; }
}
更简单:
ss.erase(ss.begin(), ss.lower_bound(v));
相关文章:
- 并行用于C++17中数组索引范围内的循环
- 如何仅使用 While 循环在给定范围内找到可被 7 整除的计数整数
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- 同一范围内矢量的两个独立"for"循环,仅打印第一个循环
- 在基于范围的循环范围内的双/整数使用和数据缩小
- 在initializer_list范围内进行循环
- 自动和范围内 for 循环 C++11 不起作用
- 基于指针容器循环的范围内的值语义
- 以下是基于循环的范围内的幕后列表
- 基于循环的C 范围内的Ampers和
- 循环范围内的初始值设定项列表
- 循环直到整数输入在所需范围内无法处理非数字字符输入
- 我们可以擦除c++11中基于循环的范围内的项目吗
- 使用对指针的引用作为循环C++11范围内的序列
- 给定范围内的完美平方:循环执行异常
- 从矢量中删除项目,而在 C++11 范围内'for'循环?
- 通过引用传递向量,并在基于for循环的范围内更改其值
- 如何在'while(getline(...))'循环中让'string line'与'getline(in,line)'处于同一范围内?
- 循环计数某个范围内的事件编号时总是返回1
- 使用 while 循环打印两个用户输入值范围内的数字