所以我有一个名为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
答案 0 :(得分:7)
链表不支持随机访问迭代器,即不能向其迭代器添加整数。
使用std::next(lookAhead)
来获取下一个迭代器,或std::advance(lookAhead, 1)
。这些函数知道正在传递什么类型的迭代器,并且如果可能的话将使用随机搜索(例如使用std::vector
的随机访问迭代器),或者手动前进(在{{1}的情况下使用循环) })否则,就像在这种情况下一样。
小心翼翼地无条件地推进迭代器 - 过去std::advance()
未定义!
您可以阅读有关C ++迭代器here的不同类别的更多信息。
附注:你传入的时候正在复制整个列表,因为你是按值传递它的。您可能希望通过引用传递它(end()
)。您还可以使用C ++ 11 list<symbol> const& myList
关键字简化代码,该关键字会自动从初始化变量的表达式类型中推断出类型:
auto