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