Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从std::list中删除仅具有迭代器访问权限的项_C++_List_Iterator_Std_Erase - Fatal编程技术网

C++ 从std::list中删除仅具有迭代器访问权限的项

C++ 从std::list中删除仅具有迭代器访问权限的项,c++,list,iterator,std,erase,C++,List,Iterator,Std,Erase,列表是一个双链接列表。这难道不意味着只有访问迭代器才能从列表中删除项吗 也许我的问题不够清楚 #pragma once #include <list> typedef std::list<int> IntList ; typedef IntList::iterator IntIterator; class IntHiddenList { private: IntList list; public: IntIterator AddInt(int x)

列表是一个双链接列表。这难道不意味着只有访问迭代器才能从列表中删除项吗

也许我的问题不够清楚

#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"?
}
#pragma一次
#包括
typedef std::list IntList;
typedef IntList::迭代器IntIterator;
类IntHiddenList
{
私人:
国际名单;
公众:
计数器加法器(int x)
{
列表。向前推(x);
返回list.begin();
}
};
int main()
{
IntHiddenList a;
迭代器it=a.附加值(5);
//我怎样才能只用“it”从列表中删除5个呢?
}

否,您仍然需要该列表才能删除元素


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

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


不过您很幸运:boost提供了
boost::instrusive
()功能,可以完全按照您的要求执行操作。

是的。这是可以做到的。您可能会向我们展示一些代码,并更好地描述您正在尝试做的事情,因为现在的问题似乎非常简单,您可能无法得到您想要的答案。如果可能的话,更新列表的大小会很尴尬,委员会认为保持对名单大小的方便访问是一个重要特征。这对名单来说不是有点尴尬吗?我有一个指向某些对象的指针列表。当删除对象时,它可以通过自身只有迭代器而从列表中删除自己。是的,我认为这是相当严重的。老实说,我几乎从来没有使用过链表,所以我没有注意到它。这里有更多的信息:谢谢。这正是我需要知道的。