如何从迭代器获取列表



如何从迭代器获取列表?

std::list<int> list;
auto it1 = list.insert(list.end(), 1);
auto it2 = list.insert(list.end(), 2);
auto it3 = list.insert(list.end(), 3);
auto it4 = list.insert(list.end(), 4);
auto it5 = list.insert(list.end(), 5);
list.erase(it3);

在包含的代码中,我能够从列表中删除it3。如果我只知道一个迭代器,迭代器可以在没有列表变量的情况下从列表中擦除自己吗?

//Something like that
it2.list.erase(it2);

从技术上讲,可以擦除双向链表中的元素并在擦除后更新相邻节点链接。但是std::list也维护了它的 size((,它必须在 O(1( 中运行,因为 C++11。因此,如果不访问列表本身,就不可能更新列表大小。

您无法从迭代器获取列表,您可以从列表中获取迭代器。std::list 容器有一个擦除成员函数,迭代器没有,所以不,它不能擦除自己。如果您知道迭代器,请将其提供给列表的erase函数。正如注释中指出的,你不应该命名你的变量list,特别是如果你在代码中的某处有using namespace std;语句,这也是要避免的。

如文档中所述std::list::iterator满足概念BidirectionalIterator,因此您可以看到,既没有这样的概念,也没有它的祖先具有这样的功能来获取它所属的容器。

最新更新