弥补:http://blog.csdn.net/lingxiu0613/archive/2011/04/14/6322809.aspx
当链表的元素是一个结构的时候,可根据这个结构的某个参数来确定这个元素的位置,erase(iterator),就可删除链表中的元素
例:
#include <iostream>
using namespace std;
#include <list>
#include <iterator>
struct Change
{
unsigned short menuid;
char value[20];
};
list<Change> ChangeList;
void SaveValue(unsigned short menuid, char * value)
{
Change ch;
ch.menuid = menuid;
strcpy(ch.value, value);
ChangeList.push_back(ch);
}
char* ErgodicList(unsigned short menuid)
{
char* tmp = new char[20];
list<Change>::iterator ValueIt;
for (ValueIt=ChangeList.begin(); ValueIt!=ChangeList.end(); ++ValueIt)
{
if (ValueIt->menuid == menuid)
{
strcpy(tmp, ValueIt->value);
ChangeList.erase(ValueIt);
return tmp;
}
}
}
int main()
{
SaveValue(12, "1");
SaveValue(13, "0");
SaveValue(14, "1");
SaveValue(15, "0");
cout<<ErgodicList(12)<<endl;
cout<<ErgodicList(13)<<endl;
cout<<ErgodicList(14)<<endl;
cout<<ErgodicList(15)<<endl;
return 0;
}
输出:
1
0
1
0
ChangeList.erase(ValueIt);删除的是ValueIt指针所指链表中的元素,而不是删除指针,这里要特别注意!