通过引用传递给函数的stl列表不允许被引用修改

时间:2018-10-05 03:16:11

标签: c++ list stl pass-by-reference

我对stl很陌生。有人可以让我知道这里发生了什么吗? 为什么下面的代码段会在l.erase(i);上出错。我希望主要看到修改过的列表l,因为我通过引用传递了该列表。这是怎么了?

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

void erase (list<int> &l,int v){
    list<int>::iterator i=l.begin();
    for(;i!=l.end();++i){
        if(*i==v)
            l.erase(i);
    }
}

int main()
{
    list <int> a;
    a.push_back(4);
    a.push_back(5);
    a.push_back(6);
    list<int>::iterator i=a.begin();
    for(;i!=a.end();++i) cout << *i << " ";
    erase(a,5);
    cout << "\nafter:\n";
    list<int>::iterator j=a.begin();
    for(;j!=a.end();++j) cout << *j << " ";
}

0 个答案:

没有答案