0

std::list 是一个双链表。这是否意味着应该可以通过仅访问迭代器来从列表中删除项目?

也许我的问题不够清楚。

#pragma once

#include <list>


typedef std::list<int> IntList ;
typedef IntList::iterator IntIterator;

class IntHiddenList
{
private:
    IntList list;
public:
    IntIterator AddInt(int x)
    {
        list.push_front(x);
        return list.begin();
    }
};

int main()
{
    IntHiddenList a;

    IntIterator it = a.AddInt(5);


    // How would I go about deleting 5 from the list using only "it"?
}
4

2 回答 2

2

是的,理论上这是可能的。但是,标准库不允许这样做(它需要容器和迭代器来擦除)。

但是你很幸运:boost 提供了boost::instrusive( http://www.boost.org/doc/libs/1_54_0/doc/html/intrusive/list.html ) 能力来做你想做的事。

于 2013-08-19T20:52:28.547 回答
0

不,您仍然需要列表才能删除元素。

在 STL 中,迭代器只保存指向数据的指针,并提供在容器中移动的操作。你可以在这里看到很好的表格描述。

于 2013-08-19T20:50:50.583 回答