用C ++修改STL列表内容

时间:2017-11-10 09:34:53

标签: c++ stl

在下面的代码片段中,我试图操纵MAP mp中存在的每个列表的内容,但是通过返回指向列表需要修改的列表对应的映射键的指针。我知道可以直接修改列表内容,而不是调用getlist然后修改它,但我是STL和C ++的新手,并尝试通过迭代和迭代来学习STL。

执行以下代码时,会在行#34;(* lit)= 10"处抛出分段错误。任何人都可以帮我理解这里出了什么问题吗?

static void getlist(int num,map<int,list<int>> mp, list<int>** l_ptr )
{
    map<int,list<int>>::iterator it = mp.begin();
    while( it != mp.end())
    {
        if(it->first == num )
        {
            *l_ptr = &(it->second);
            return;
        }
        it++;
    }

}

int main() 
{
    map<int,list<int>> mp;
    mp[1] = {2,2,2};
    mp[2] = {3,3,3};
    mp[3] = {4,4,4};
    map<int,list<int>>::iterator it = mp.begin();
    list<int>::iterator lit;
    list<int>* r_l = new list<int>;

    //getlist(it->first,mp,r_l);
    while( it != mp.end())
    {
        getlist(it->first,mp,&r_l);
        lit = r_l->begin();
        while(lit != r_l->end())
        {
            (*lit) = 10;
            lit++;
        }
        it++;
    }

    it = mp.begin();
    while( it != mp.end())
    {
        lit = (it->second).begin();
        while(lit != (it->second).end())
        {
            cout<<(*lit);
            lit++;
        }
        it++;
    }

    return 0;
}

0 个答案:

没有答案