首页 > 解决方案 > 二进制表达式的无效操作数 - 使用 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 和迭代器的新手,因此将不胜感激。

标签: c++

解决方案


std::list不支持随机访问迭代器。也就是说,i < read.end()无效。您可以测试相等性:i != read.end(),但您必须小心一点,因为这些增量可能会将迭代器推到末尾,并且==测试将毫无意义。

或者你可以使用std::vector代替std::list; 这将使<测试正常。

正如我在对您之前的问题的评论中所建议的那样,您最好创建一个流对象来解析该输入。


推荐阅读