在迭代列表的一部分时弃用了内核

时间:2018-07-29 13:26:36

标签: c++ list

我有一个保留字符串的列表。我想修改列表中显示的每个元素,然后将新值推送到列表中,然后弹出旧的元素。这是我的代码:

#include <iostream>
#include <string>
#include <list>

using namespace std;

int main(void)
{
    list <string> tmp;
    tmp.push_back("pac");
    tmp.push_back("sac");
    tmp.push_back("fac");

    auto last = tmp.end();
    for (auto beg = tmp.begin();beg != last; ++beg){
        for (int i = 0; i < 3; ++i)
            tmp.push_back(*beg + to_string(i));

        tmp.pop_front();
    }


    for (auto a : tmp)
        cout << a << endl;


    return 0;
}

但是,我收到Segmentation fault (core dumped)错误,这是由于tmp.pop_front()造成的。如果我删除了它,该程序可以正常运行,但旧元素仍在列表中。

这是我希望的输出:

pac0
pac1
pac2
sac0
sac1
sac2
fac0
fac1
fac2

问题出在哪里?

0 个答案:

没有答案