/* 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和迭代器的新手,在此方面的帮助将不胜感激。
答案 0 :(得分:3)
std::list
不支持随机访问迭代器。也就是说,i < read.end()
无效。您可以测试是否相等:i != read.end()
,但是您必须要小心一点,因为这些增量可能会将迭代器推到末尾,而==
测试将毫无意义。
或者您可以使用std::vector
代替std::list
;这样可以使<
测试正常。
如我在对先前问题的评论中所建议的那样,最好创建一个流对象来解析该输入。
答案 1 :(得分:1)
您需要使用!=
代替<
for(; i != read.end();)
仅供参考,在此示例中,while
循环更有意义:
while(i != read.end())