vector<int> ParseLine (string line){
  istringstream sline(line);

  char c;
  int n;
  vector<int> row;
  while(sline >> n >> c && c == ",")
        row.push_back(n);

  return row;
}

这是从文件中读取二维 vector 的函数之一。我想知道 while 循环背后的逻辑。

最佳答案

这按顺序做了几件事情,这段代码:

  • sline >> nsline 读取一个整数到变量 n 中。重要的是,这也会返回 sline
  • 我们现在有效地拥有 sline >> c ,它从 sline 读取一个字符到变量 c 中。
  • 只有当双方都为真时,&& 运算符才返回真。 sline >> c 将再次返回 sline,只要还有字符要读取,c == "," 就会评估为真。
  • c 检查 c == ',' 是否为逗号。这可能应该更改为 n 以便它的字符 == 字符比较而不是字符和字符串之间的比较。
  • 然后在循环体中整数 row 被附加到 vector row 。这会保存整数,以便当我们最后返回 "45, 52, 4," 时,这个整数将是一个元素。

  • 整体效果是将一串逗号分隔的整数解释为整数 vector 。请注意,此代码适用于具有任意数量元素的 vector ,但前提是每个数字后都有逗号。 (例如 "45, 52, 4" 但不是 ojit_code )

    关于c++ - while(sline >> n >> c && c== ',') 背后的逻辑是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61967368/

    10-09 06:24