Joh*_*mew 10 c++ containers iterator set c++11
对于大多数容器,该iterator
类型提供对容器中的值的读写访问,并且该const_iterator
类型提供只读访问.但是,因为std::set<T>
迭代器类型不能提供读写访问,因为修改集合中的值(可能)会破坏容器不变量.因此,在std::set<T>
,无论是iterator
和const_iterator
提供只读访问.
这引出了我的问题:你可以用a做std::set<T>::iterator
的事情和用你做的事情之间有什么区别std::set<T>::const_iterator
吗?
请注意,在C++ 11中,容器的操作方法(例如erase
)可以带const_iterator
参数.
不,它们之间没有太大的功能差异.当然,曾经有过回到C++ 03,当时set<T>::iterator
没有返回const T&
.但是一旦他们改变了它们,就会遇到两种不同的迭代器,它们都做同样的事情.
实际上,标准很清楚它们具有相同的功能(它们可以是相同的类型,但不是必须的).从23.2.4开始,p.6:
iterator
关联容器的类型是双向迭代器类别.对于关联容器,其中值类型是相同的键类型,都iterator
和const_iterator
是恒定的迭代器.这是unspeci网络版是否不iterator
和const_iterator
是同一类型.[ 注:iterator
和const_iterator
在这种情况下具有相同的语义,并且iterator
是可转换到const_iterator
.用户可以通过始终const_iterator
在其功能参数列表中使用来避免违反单一定义规则.- 结束说明 ]