查找std::set
的成员类型iterator
的类型时,我期望是指向其value_type const
的双向迭代器。然而,根据cppreference.com,它有以下成员类型:
成员类型 | 定义 | … | … |
---|---|
iterator | ConstantLegacyBidirectionalIteratorto value_type |
const_iterator | LegacyBidirectionalIteratorto const value_type |
… | … |
在我看来,没有什么区别。说明应与其他容器的成员类型描述一致。即这些表述在定义上有什么不同?
iterator
指的是xxxIterator
到value_type
,const_iterator
指的是xxxIterator
到const value_type
(它已经是隐式常数了)。例:[std::map
].(https://en.cppreference.com/w/cpp/container/map#Member_types),std::vector
额外的常量在std::set::iterator
中来自associative.reqmts#general-6
对于值类型与键类型相同的关联容器,iterator和const_iterator都是常量迭代器。iterator和const_iterator是否为同一类型未指定。
既然上面提到了这两种成员类型不一定是相同的,那么对于cppref来说,做出这样的字面上不同的表述是完全可以的(尽管通常是相同的,std::set::begin
也提到了)
关于可变迭代器要么是常量,要么是可变的。它只在真正必要的时候使用,所以它并不意味着没有前导可变变量的迭代器是常量。