麻烦在对象列表上使用迭代器

时间:2016-02-12 22:56:12

标签: c++ list iterator

所以我有一个名为symbol的类,它由4个字符串组成,这些字符串都是公共的。我创建了这些列表,我想在此列表中查看。这就是我到目前为止所拥有的。我查找了迭代器方法,并说它支持+运算符,但是我得到了一个错误。

    bool parser::parse(list<symbol> myList){
    //Will read tokens by type to make sure that they pass the parse
    std::list<symbol>::const_iterator lookAhead = myList.begin();
    if ((lookAhead + 1) != myList.end)
        lookAhead++;
    for (std::list<symbol>::const_iterator it = myList.begin(); it != myList.end(); ++it){
        if (it->type == "") {

        }
    }

    return true;
}

尝试向lookAhead添加1时出错。为列表创建前瞻的有哪些好方法?

谢谢, BINX

1 个答案:

答案 0 :(得分:7)

链表不支持随机访问迭代器,即不能向其迭代器添加整数。

使用std::next(lookAhead)来获取下一个迭代器,或std::advance(lookAhead, 1)。这些函数知道正在传递什么类型的迭代器,并且如果可能的话将使用随机搜索(例如使用std::vector的随机访问迭代器),或者手动前进(在{{1}的情况下使用循环) })否则,就像在这种情况下一样。

小心翼翼地无条件地推进迭代器 - 过去std::advance()未定义!

您可以阅读有关C ++迭代器here的不同类别的更多信息。

附注:你传入的时候正在复制整个列表,因为你是按值传递它的。您可能希望通过引用传递它(end())。您还可以使用C ++ 11 list<symbol> const& myList关键字简化代码,该关键字会自动从初始化变量的表达式类型中推断出类型:

auto