在对象列表上使用迭代器时出现问题
Trouble using iterator on a list of objects
所以我有一个名为 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;
}
尝试添加 1 以提前查看时出现错误。 有哪些好方法可以创建列表的前瞻性视图?
谢谢宾克斯
链表不支持随机访问迭代器,即您不能向其迭代器添加整数。
使用 std::next(lookAhead)
获取下一个迭代器,或std::advance(lookAhead, 1)
。这些函数知道正在传递哪种迭代器,并且如果可能的话,将使用随机查找(例如,使用std::vector
的随机访问迭代器),或者手动前进(在std::advance()
的情况下使用循环),否则,就像在这种情况下一样。
不过,要小心无条件地推进迭代器——前进超过end()
是不确定的!
您可以在此处阅读有关不同类别的C++迭代器的更多信息。
旁注:传入时,您将复制整个列表,因为您是按值传递的。您可能希望通过引用传递它(list<symbol> const& myList
)。您还可以使用 C++11 auto
关键字简化代码,该关键字从初始化变量的表达式的类型自动推断类型:
bool parser::parse(list<symbol> const& myList){
// Will read tokens by type to make sure that they pass the parse
auto lookAhead = myList.begin();
if (lookAhead != myList.end() && std::next(lookAhead) != myList.end())
++lookAhead;
for (auto it = myList.begin(); it != myList.end(); ++it){
if (it->type == "") {
}
}
return true;
}
相关文章:
- ESP8266单片机矢量迭代器的C++问题
- 成员函数中的迭代器出现问题
- 迭代器的指针操作问题
- 为什么在这个C++问题中使用const_iterator而不仅仅是迭代器?
- std::filesystem::directory_迭代器链接器问题(C++17)
- 使用 find() 通过 std::set 的迭代器将不起作用。出了什么问题?
- 无法取消引用超出范围的向量迭代器 - 有什么问题?
- 调用模板函数的问题"No matching function for call"参数:迭代器、对象函数
- 迭代器的问题
- 无法理解迭代器的问题?
- 使用迭代器时遇到问题,每 M 次传递一次擦除一个向量项
- 有关使用矢量迭代器访问对象方法的问题
- 自定义迭代器而不是解释问题
- 基于范围的自定义迭代器:constness问题
- 常量迭代器的问题
- 对于循环迭代器问题 c++
- 如果使用迭代器,如何解决遍历列表的问题
- 字符串迭代器不可用C 问题
- 将MAP与一对用作C 迭代器问题中的键
- 我的自定义迭代器有什么问题