如何从迭代器中获取列表

时间:2018-03-07 19:20:10

标签: c++

如何从迭代器中获取列表?

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);

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

documentation std::list::iterator中所述满足概念BidirectionalIterator,因此您可以看到这样的概念不是它的祖先有这样的功能来获取它所属的容器。

答案 2 :(得分:1)

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

相关问题