迭代时std :: forward_list :: push_front

时间:2015-04-18 17:47:33

标签: c++ c++11

std::forward_list<int> foo {1,2,3,4,5};

for(int i:foo)
{
    if(i==1) foo.push_front(0);

    std::cout << i << std::endl;
}

我已经在Visual Studio和coliru上测试了它,而且根据我对如何设计单个链表的理解应该不会有问题。但是,我对forward_list的内部结构或stl容器和迭代器一般都不太了解,所以我想要确认:

以上代码是否安全?或者我是否在调用UB,它恰好在我的小测试中没有启动大灾难。

1 个答案:

答案 0 :(得分:2)

来自cppreference.com

  

添加,删除和移动列表中的元素或跨越元素   几个列表,不会使当前引用的迭代器无效   到列表中的其他元素。但是,迭代器或引用   引用元素时相应的元素无效   从列表中删除(通过erase_after)。