gpt4 book ai didi

c++ - 关于 C++ STL 列表类方法 erase()

转载 作者:太空宇宙 更新时间:2023-11-04 15:27:35 25 4
gpt4 key购买 nike

list::erase() 的文档说,“之前调用析构函数”,这是什么意思?如果我想erase(it)一个项目,然后再次push_back(*it)这个项目,这是否是非法的,因为它已经被销毁了?

最佳答案

是的,这将导致未定义的行为。一旦您删除 一个列表迭代器,您就会使 迭代器失效,这意味着它引用的对象不再保证有效。这意味着如果您随后尝试在任何上下文中使用迭代器,包括尝试取消引用该值以再次将其添加到列表中,它将导致未定义的行为,这可能会导致程序崩溃、覆盖重要内存或什么都不做。

如果要将列表的元素移到后面,可以考虑使用列表的splice方法:

myList.splice(myList.end(), myList, it);

这会将元素移动到末尾而不进行复制。

关于c++ - 关于 C++ STL 列表类方法 erase(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4926436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com