如何从迭代器获取列表?
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
,因此您可以看到,既没有这样的概念,也没有它的祖先具有这样的功能来获取它所属的容器。