这是适当的行为吗?std :: map迭代器无效

卡伦·瑞
#include <iostream>
#include <map>

int main(int argc, char** argv)
{
  std::map<int, int> map;
  map.emplace(1, 1);
  auto reverse_iter = map.rbegin();
  std::cout << reverse_iter->first << ", " << reverse_iter->second << std::endl;
  map.emplace(2, 2);
  std::cout << reverse_iter->first << ", " << reverse_iter->second << std::endl;

  return 0;
}

打印输出:

1, 1
2, 2

根据标准,这真的应该发生吗?我没有碰到reverse_iter,但是它指向的值正在改变。我认为std :: map中的迭代器应该可以安全插入。然而,似乎正在决定reverse_iter不会一直指向我告诉它的值,而是指向“此刻在地图末尾的任何情况”。

更新:更多信息,以防万一:正向迭代器似乎没有发生这种情况(在任何情况下,我似乎都能找到),我的gcc版本是5.1.1-4。

斯拉瓦

如此处引用http://en.cppreference.com/w/cpp/container/map/rbegin

反向迭代器将迭代器存储到与其实际引用的元素相比的下一个元素。

副作用是,如果在该迭代器之前插入一些内容(包括end()),则在取消引用该反向迭代器时会看到该新值。我认为在这种情况下反向迭代器不会失效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

std :: priority_queue,带有迭代器到std :: map的元素-无效的堆

来自分类Dev

std :: map :: begin()之前的STL迭代器

来自分类Dev

std :: unordered_map的递增迭代器

来自分类Dev

std :: list-迭代器在移动时是否无效?

来自分类Dev

std :: unique是否会使向量迭代器无效?

来自分类Dev

std :: vector :: erase()在擦除时是否会使迭代器无效?

来自分类Dev

修改std :: vector是否会使迭代器无效?

来自分类Dev

带有迭代器的std :: map从std :: map的迭代器到std :: list

来自分类Dev

如果列表为空,则std list反向迭代器的过去迭代器无效

来自分类Dev

这是实现迭代器的好方法吗?

来自分类常见问题

这是std :: ref行为逻辑上的吗?

来自分类Dev

std :: map多个迭代器,删除及其值

来自分类Dev

std :: map使用迭代器查找距离,程序不会终止

来自分类Dev

再次获取std :: map会更改先前的迭代器

来自分类Dev

std :: map :: begin()返回带有垃圾的迭代器

来自分类Dev

在C ++ std :: map中使用模板迭代器

来自分类Dev

如何通过推进std :: map迭代器来停止for循环?

来自分类Dev

为自定义 std::map 迭代器实现 erase()

来自分类Dev

我可以将std :: map迭代器解包到可选的结构化绑定吗?

来自分类Dev

在std :: unordered_map <int,std :: vector <Element >>上进行迭代的迭代器

来自分类Dev

通过`std :: string :: begin()`/`std :: string :: end()`进行迭代器无效?

来自分类Dev

tar提取具有无效权限-这是预期的行为吗?

来自分类Dev

std :: deque:“元素的插入和删除可能会使迭代器无效”是什么意思?

来自分类Dev

将initializer_list插入到std :: vector时出现“无效的迭代器范围”

来自分类Dev

为什么插入会使std :: set反向迭代器无效

来自分类Dev

以下列方式纠正std :: vector迭代器无效是否有效?

来自分类Dev

为什么std :: vector :: insert使插入点之后的所有迭代器无效

来自分类Dev

由于从 std::map 派生的类中的 std::map 迭代器导致的内存错误

来自分类Dev

意外的迭代器行为

Related 相关文章

  1. 1

    std :: priority_queue,带有迭代器到std :: map的元素-无效的堆

  2. 2

    std :: map :: begin()之前的STL迭代器

  3. 3

    std :: unordered_map的递增迭代器

  4. 4

    std :: list-迭代器在移动时是否无效?

  5. 5

    std :: unique是否会使向量迭代器无效?

  6. 6

    std :: vector :: erase()在擦除时是否会使迭代器无效?

  7. 7

    修改std :: vector是否会使迭代器无效?

  8. 8

    带有迭代器的std :: map从std :: map的迭代器到std :: list

  9. 9

    如果列表为空,则std list反向迭代器的过去迭代器无效

  10. 10

    这是实现迭代器的好方法吗?

  11. 11

    这是std :: ref行为逻辑上的吗?

  12. 12

    std :: map多个迭代器,删除及其值

  13. 13

    std :: map使用迭代器查找距离,程序不会终止

  14. 14

    再次获取std :: map会更改先前的迭代器

  15. 15

    std :: map :: begin()返回带有垃圾的迭代器

  16. 16

    在C ++ std :: map中使用模板迭代器

  17. 17

    如何通过推进std :: map迭代器来停止for循环?

  18. 18

    为自定义 std::map 迭代器实现 erase()

  19. 19

    我可以将std :: map迭代器解包到可选的结构化绑定吗?

  20. 20

    在std :: unordered_map <int,std :: vector <Element >>上进行迭代的迭代器

  21. 21

    通过`std :: string :: begin()`/`std :: string :: end()`进行迭代器无效?

  22. 22

    tar提取具有无效权限-这是预期的行为吗?

  23. 23

    std :: deque:“元素的插入和删除可能会使迭代器无效”是什么意思?

  24. 24

    将initializer_list插入到std :: vector时出现“无效的迭代器范围”

  25. 25

    为什么插入会使std :: set反向迭代器无效

  26. 26

    以下列方式纠正std :: vector迭代器无效是否有效?

  27. 27

    为什么std :: vector :: insert使插入点之后的所有迭代器无效

  28. 28

    由于从 std::map 派生的类中的 std::map 迭代器导致的内存错误

  29. 29

    意外的迭代器行为

热门标签

归档