二进制表达式的无效操作数-使用for和迭代器

时间:2018-10-05 16:40:23

标签: c++

/* 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和迭代器的新手,在此方面的帮助将不胜感激。

2 个答案:

答案 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())