c++ - C++17 标准中关于 std::map::iterator 是否存在不一致?
问题描述
我对关于迭代器的 C++17 标准命名要求有点困惑;在我看来,这std::map::iterator
违反了要求。从标准中,我收集了以下内容:
- 所有容器迭代器都应该满足 ForwardIterator。
- 对于
It
满足 ForwardIterator 的迭代器,std::iterator_traits<It>::reference
必须是value_type&
- ifIt
是可变的 - 或const value_type&
- ifIt
是常量。 - 概念“<code>It is mutable”被定义为“<code>It also satisfies OutputIterator”,而“constant”表示不可变。
- 为了满足 OutputIterator,表达式
*it = o
应该是o
对迭代器可写的类型有效;必须有一组此类类型的非空集。
现在,std::iterator_traits<std::map::iterator>::reference
is value_type&
(没有const
),但迭代器不满足 OutputIterator 要求——value_type
从map::iterator
is开始std::pair<const Key, Value>
,我们永远不能分配给*it
。
所以,问题是,我是否忽略了处理这种不一致的标准的某些部分?还是我对标准要求的解释有误?
解决方案
推荐阅读
- flow-project - Flow-project 将 redis 绑定到 localhost 以确保安全
- python - Python POST 请求返回 404 状态码,但 GET 请求返回 200
- javascript - 如何使这台 JavaScript 钢琴上的第一个按钮正常工作?
- winforms - Powershell 文本框占位符
- javascript - 使用 Python 中的事件获取 cognito 用户详细信息
- python - 无法导入“NLTK”
- amazon-web-services - 从 AWS DataPipeline 调用 Lambda 函数
- python - 如何设置python中本地模块的路径以在CircleCI中识别?
- python - 如何将 io.BytesIO pdfrw PDF 保存到 Django FileField
- android-studio - 更改来电屏幕标题 - Android Studio 广播接收器