如何从迭代器中获取列表?
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);
答案 0 :(得分:2)
从技术上讲,可以擦除Doubly linked list中的元素并在擦除后更新相邻节点链接。但是std::list
也维护它size(),它必须在C ++ 11之后的O(1)中运行。因此,如果不访问列表本身就无法更新列表大小。
答案 1 :(得分:1)
如documentation std::list::iterator
中所述满足概念BidirectionalIterator
,因此您可以看到这样的概念不是它的祖先有这样的功能来获取它所属的容器。
答案 2 :(得分:1)