stl list(链表)的删除问题

    技术2022-05-19  23

    弥补: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指针所指链表中的元素,而不是删除指针,这里要特别注意!


    最新回复(0)