Meh*_*dad 4 c++ iterator language-lawyer
当C ++标准说迭代器没有被“无效”时,这是仅指代取消引用的能力,还是暗示着遍历功能的某些意义?
例如,如果swap/ insert/ etc。确保一个容器不会使任何迭代器无效,仅此事实是否就意味着还可以保证推进一个旧的迭代器也是有效的?如果是这样,是否可以保证以与新迭代器相同的顺序遍历元素?
(我在这里询问的是传统的/“旧式”迭代器,尽管如果新样式有任何区别,那么提及它当然也会有所帮助。)
“当C ++标准说迭代器没有被“无效”时,这是仅指代取消引用的能力,还是暗示着遍历功能的某些意义?”
如果迭代器没有失效,则它保持有效(在所有方面)。如果它无效,则它将变为无效(出于所有目的(取决于迭代器,其可能包含取消引用,也可能包含取消引用))。“对取消引用有效”和“对增量有效”之间没有区别。无论出于任何目的,它都是有效的或无效的。相当二进制。
标准中唯一关于无效迭代器的唯一内容是:
在:n4820
23.3.1总的来说[iterator.requirements.general]
15无效的迭代器是可能为单数的迭代器。233
注意:233)此定义适用于指针,因为指针是迭代器。取消引用已经无效的迭代器的效果是不确定的。
23.3.1总的来说[iterator.requirements.general]
7 ...大多数表达式的结果都没有为奇异值定义;唯一的例外是破坏其保持一个迭代奇异值,非奇异值对包含一个迭代器的分配奇异值,并且,对于满足Cpp17DefaultConstructible要求迭代器,使用一个值初始化的迭代器作为源复制或移动操作。...
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |