std :: set :: iterator和std :: set :: const_iterator之间是否存在操作差异?

Joh*_*mew 10 c++ containers iterator set c++11

对于大多数容器,该iterator类型提供对容器中的值的读写访问,并且该const_iterator类型提供只读访问.但是,因为std::set<T>迭代器类型不能提供读写访问,因为修改集合中的值(可能)会破坏容器不变量.因此,在std::set<T>,无论是iteratorconst_iterator提供只读访问.

这引出了我的问题:你可以用a做std::set<T>::iterator的事情和用你做的事情之间有什么区别std::set<T>::const_iterator吗?

请注意,在C++ 11中,容器的操作方法(例如erase)可以带const_iterator参数.

Nic*_*las 8

不,它们之间没有太大的功能差异.当然,曾经有回到C++ 03,当时set<T>::iterator没有返回const T&.但是一旦他们改变了它们,就会遇到两种不同的迭代器,它们都做同样的事情.

实际上,标准很清楚它们具有相同的功能(它们可以是相同的类型,但不是必须的).从23.2.4开始,p.6:

iterator关联容器的类型是双向迭代器类别.对于关联容器,其中值类型是相同的键类型,都iteratorconst_iterator是恒定的迭代器.这是unspeci网络版是否不iteratorconst_iterator是同一类型.[ 注: iteratorconst_iterator在这种情况下具有相同的语义,并且iterator是可转换到const_iterator.用户可以通过始终const_iterator在其功能参数列表中使用来避免违反单一定义规则.- 结束说明 ]