【发布时间】:2012-09-18 14:32:12
【问题描述】:
我有一个指向列表中项目的指针p(不是迭代器)。然后我可以使用p 从列表中删除(擦除)该项目吗?比如:
mylist.erase(p);
到目前为止,我只能通过遍历列表直到到达位置p 的项目,然后使用erase 方法来做到这一点,这似乎非常低效。
【问题讨论】:
-
请说明您对指针的使用。列表是否以指针类型为模板?
-
效率低下的原因是因为您以错误的方式处理问题(可能是整个 C++)。您应该从一开始就通过迭代器处理列表元素! (你来自 C 或汇编程序背景?)
-
^ 这个……想想吧
-
@KerrekSB 是的,最好传递列表迭代器而不是指针或对列表元素的引用。但是在我当前的项目中,我想编写一个库,它向“外部世界”提供对象(而不是指向对象的迭代器),但仍需要跟踪分配给它的所有对象。解决方案是手动将列表功能编码到分配的对象中(通过添加一些 prev/next 指针)或在搜索正确的迭代器时继续遍历 C++
list。
标签: c++ list pointers iterator