为什么这个迭代器常量
Why is this iterator const?
可能重复:
C++STL集更新是乏味的:我可以';t在中更改元素
为什么这段代码抱怨我的参数是const_iterator,而它没有以这种方式声明?
void foo(std::set<int>::iterator it)
{
*it=2;
}
我得到错误:分配只读位置'it.std::_Rb_tree_const_iterator<_Tp>::运算符*,带_Tp=int’
因为它是set
。集合使用常量迭代器,因为您无法在不打乱集合顺序的情况下更改值。
所有集合迭代器都是const
。不能通过迭代器进行赋值来更新集合成员的值。您必须erase
为旧值,insert
为新值。
因为在C++11中设置<>:迭代器与set<>相同:const_iterator。也就是说,不能修改集合中的元素。
相关文章:
- 是否应避免从非常量迭代器转换为常量迭代器?
- 如何实现常量迭代器?
- 是否可以重用通常的迭代器来构建常量迭代器?
- 使用 declval 获取非常量迭代器
- 为什么在此代码中隐式转换为常量迭代器失败?
- 常量迭代器的问题
- 链表常量迭代器
- 属性树常量迭代器的索引
- 如何正确地声明从非常量迭代器到指针的常量指针
- 无法取消引用映射常量迭代器的mapped_type
- 强制 foreach 使用常量迭代器
- 使用常量迭代器的运算符重载
- unordered_set 非常量迭代器
- 常量迭代器与可变迭代器:相同的算法不同的代码
- 自定义迭代器和自定义常量迭代器之间的转换
- 从常量迭代器到映射向量,获取映射向量中映射元素的键和值
- 在 C++14 中,常量迭代器仍然是邪恶的吗?
- 用常量迭代器从STL容器中擦除
- c++ STL,常量迭代器,find()
- 在 Boost 的多索引容器中获取一个非常量迭代器