c++ - 二进制表达式的无效操作数 - 使用 for 和迭代器
问题描述
/* strtok example */
#include <iostream>
#include <string>
#include<list>
using namespace std;
int main ()
{
list<string> read;
char str[] ="g 6 7 v 7 e 0 4 e 1 4 e 2 5 e 3 5 e 4 6 e 5 6";
char * pch;
pch = strtok (str," ");
while (pch != NULL)
{
read.push_back(pch);
pch = strtok (NULL, " ");
}
list<string>::iterator i;
i = read.begin();
i++;
int grid_x = stoi(*i++,nullptr,10);
int grid_y = stoi(*i++,nullptr,10);
i++;
int vertices = stoi(*i++,nullptr,10);
i++;
for(;i<read.end();)
{
cout<<*i++;
cout<<*i++;
i++;
}
return 0;
}
当我的代码进入 for 循环时,它会抛出一个错误,指出二进制表达式的操作数无效。我正在做一个简单的比较来检查我的迭代器是否没有到达列表的末尾。所以,我不确定为什么它认为这种比较是无效的。由于我是 STL 和迭代器的新手,因此将不胜感激。
解决方案
std::list
不支持随机访问迭代器。也就是说,i < read.end()
无效。您可以测试相等性:i != read.end()
,但您必须小心一点,因为这些增量可能会将迭代器推到末尾,并且==
测试将毫无意义。
或者你可以使用std::vector
代替std::list
; 这将使<
测试正常。
正如我在对您之前的问题的评论中所建议的那样,您最好创建一个流对象来解析该输入。
推荐阅读
- google-cloud-platform - 删除Data Fusion实例后如何保存管道
- javascript - NUXT 压缩/缩小/组合 ccs、js 和 HTML
- docker - 如何在 Windows Docker 映像中安装 .pfx 证书
- reactjs - 用于已发布/未发布 api 回调的 useState 挂钩
- r - 课堂学习不平衡
- java - 从 Infinispan 7 更新到 10,如何将 UUID 作为 UUID 的键作为类中的字段处理?
- python - 使用 python 将 XML 文件中的值替换为向量的值
- python - 网页抓取:请求内容中缺少标签
- nginx - nginx如何转发二级域名
- mysql - 选择在两个时间戳之间变化的值