std::设置迭代器常量限定符
std::set iterator const qualifier
可能重复:
C++STL集更新很乏味:我无法在中更改元素
我被难住了:
struct File {
struct Handle {
size_t count;
};
std::set<Handle>::iterator handle_;
~File() {
File::close(*this);
}
static void close(File &f) {
(*f.handle_).count--;
}
};
对于ICC,错误为:
error #137: expression must be a modifiable lvalue
(*f.handle_).count++;
^
为什么std::set::迭代器是const?
std::set::iterator
是一个常量迭代器,因为修改集合中元素的值可能会使元素的总排序和唯一性失效。要修改元素,需要将其复制出来,擦除该元素,修改副本,然后将其放回集合中。
Handle handle = *(f.handle_);
set.erase(f.handle_);
handle++;
set.insert(handle);
// or just set.insert(++handle) if you've overloaded prefix increment too
相关文章:
- 将迭代器设置为具有最高键的值
- 确定设置迭代器的顺序
- C++映射/设置迭代器不可递增错误
- C XTREE崩溃在出口上,映射/设置迭代器不可用
- 尝试设置迭代器时会遇到奇怪的错误
- C 设置lower_bound()迭代器
- c++映射/设置迭代器不可取消引用
- C2676 二进制"++":设置迭代器<TElement>未定义此运算符
- 插入函数中的迭代器设置
- 映射/设置迭代器在 std::map 中不可递增
- OpenMP STL设置容器迭代器
- 映射/设置迭代器未解除可绑定运行时错误
- 调试断言失败映射/设置迭代器不可取消引用
- 为什么C++设置迭代器不能转换为布尔值?
- 尝试在 for 循环中使用设置迭代器时与"运算符<"不匹配
- 在列表迭代器中设置下一个对象
- 为什么插入会使标准::设置反向迭代器无效
- 映射/设置迭代器不可递增
- C++:如何将迭代器设置为另一个列表中的结构内的列表
- 无法将迭代器设置为std::对的std::映射