std::forward_list::p ush_front 同时迭代

std::forward_list::push_front while iterating

本文关键字:迭代 front forward list std ush      更新时间:2023-10-16
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,它只是碰巧没有在我的小测试中启动

启示录。

来自 cppreference.com

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