首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

急问,为什么vector调用erase()时出错说内存不能为read解决方法

2012-03-11 
急问,为什么vector调用erase()时出错说内存不能为read要执行的代码如下:(1)Elemente(minsup)(2)vector E

急问,为什么vector调用erase()时出错说内存不能为read
要执行的代码如下:

(1)Element   e(minsup);
(2)vector <Element> ::iterator   newEnd=remove(header.begin(),header.end(),e);
(3)header.erase(newEnd,header.end());
运行到(3)时就抱错,说“**内存不能为read”。

其中,
header定义为:
vector <Element>   header;
Element定义为:
class   Element
{
public:
Element(){next=0;   end=0;}
Element(int   sup){support=sup;   next=0;   end=0;}
~Element()
{
}
bool   operator <   (const   Element     &e)   const   {return   support   >   e.support;}
bool   operator==(const       Element&       e)      
{      
return       support       <       e.support;      
}      

int   support;
Item   *next;
Item   *end;
};

Item的定义:
class   Item
{
public:
Item(int   newId,   int   newSupport){id=newId;   support=newSupport;next=0;   parent=0;}
~Item(){}
void   addChild(Item   *item)   {children.insert(item);}

int   id;                                                                 //节点id。
int   support;                                                       //结点支持度
Item   *next;                                                         //指针链上的下一个节点。
Item   *parent;                                                     //父节点。
set <Item   *>   children;                                       //子结点的集合。

};


我的header中有一些元素,我要将header中的Element的support小于一定值的Element都erase掉。但是程序运行时提示说内存不能为read。后来又发现,如果我从remove操作返回的iterator处开始到header的结尾,一个一个的erase,有的可以顺利erase,有的不行。
请各位大侠帮忙啊。


[解决办法]
erase会导致所有它后面的iterator失效
所以,看Effective STL,使用v.erase(remove(v.begin(), v.end(), X), v.end);技术
[解决办法]
我觉得楼主的写法没什么错啊,F11跟进去看看嘛。
[解决办法]
还是把完整代码贴上来,比如header如何填充的,如何删除的。

热点排行