首页 > 解决方案 > C++17 标准中关于 std::map::iterator 是否存在不一致?

问题描述

我对关于迭代器的 C++17 标准命名要求有点困惑;在我看来,这std::map::iterator违反了要求。从标准中,我收集了以下内容:

  1. 所有容器迭代器都应该满足 ForwardIterator。
  2. 对于It满足 ForwardIterator 的迭代器,std::iterator_traits<It>::reference必须是value_type&- ifIt是可变的 - 或const value_type&- ifIt是常量。
  3. 概念“<code>It is mutable”被定义为“<code>It also satisfies OutputIterator”,而“constant”表示不可变。
  4. 为了满足 OutputIterator,表达式*it = o应该是o对迭代器可写的类型有效;必须有一组此类类型的非空集。

现在,std::iterator_traits<std::map::iterator>::referenceis value_type&(没有const),但迭代器不满足 OutputIterator 要求——value_typemap::iteratoris开始std::pair<const Key, Value>,我们永远不能分配给*it

所以,问题是,我是否忽略了处理这种不一致的标准的某些部分?还是我对标准要求的解释有误?

标签: c++language-lawyer

解决方案


推荐阅读