std::list
迭代器有一些非常好的属性 - 当删除任何其他元素时,添加新元素时甚至交换2个列表时它们仍然有效(迭代器失效规则)!
考虑以下代码行为并且迭代器是通过指向实际节点的指针形式实现的,当移动列表时它不会改变,我的猜测是迭代器在新容器中仍然有效 std::list
移动了,但我也可以通过访问实际具有“预期”值的无效内存进入UB区域。
std::list<int> l1{3, 2, 1};
std::list<int> l2;
auto it = std::prev(l1.end());
std::cout<<l1.size()<<" "<<l2.size()<<" "<<*it<<std::endl;
l2 = std::move(l1);
std::cout<<l2.size()<<" "<<*it<<std::endl;
3 0 1
3 1
如果迭代器在有效时保持有效,它是否由标准保证 std::list
被感动?其他容器怎么样?