如何在C ++中减少迭代器?

时间:2015-05-04 06:01:03

标签: c++ iterator

我正在使用自定义定义结构的c ++ stl列表,并且我有一个遍历该列表的迭代器但是在某一点上我需要递减并返回列表中的一些条目。我试过itt--但这只是给了我一个分段错误。有没有其他方法可以做到。

我也试过这个std::advance(cur_instruc, a);

这是迭代器的样子:

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

using namespace std;

typedef struct {
    int instruction_ptr;
    int token;
    std::string instruction;
    std::string value;
} decoraded_nodes;

int main () {
    std::list<decoraded_nodes> instruction_list;
    std::list<decoraded_nodes>::iterator it;
    it = instruction_list.begin();

    decoraded_nodes a;
    a.instruction_ptr = 1;
    a.token = 1;
    a.instruction = "1";
    a.value = "2";

    decoraded_nodes b;
    b.instruction_ptr = 1;
    b.token = 1;
    b.instruction = "1";
    b.value = "1";

    decoraded_nodes c;
    c.instruction_ptr = 1;
    c.token = 1;
    c.instruction = "1";
    c.value = "3";

    instruction_list.insert(it, a);
    instruction_list.insert(it, b);
    instruction_list.insert(it, c);

    bool aa = false;
    int bb = 0;

    for (std::list<decoraded_nodes>::iterator cur_instruc = instruction_list.begin(), 
        end = instruction_list.end(); 
        cur_instruc != end; ++cur_instruc) {
        cout << cur_instruc->value;

        bb++;

        if (bb == 1) {
            aa = true;
        }

        if (aa) {
            cur_instruc--;
            aa = false;
        }

    }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

在循环内更改循环“for”变量(在本例中为迭代器)是个坏主意。当你需要返回并使用这个新创建的迭代器时,尝试在循环内创建新的迭代器。