while(sline >> n >> c && c== ',') 背后的逻辑是什么?

Nec*_*sil 4 c++ loops vector while-loop

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;
}
Run Code Online (Sandbox Code Playgroud)

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

Tre*_*van 9

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

  1. sline >> nsline变量中读取一个整数n。重要的是,这也会返回 sline.

  2. 我们现在有效地sline >> csline变量中读取字符c

  3. &&仅当双方都为真时,运算符才返回真。sline >> c将再次返回sline,只要还有字符要读取,它就会评估为真。

  4. c == ","检查这c是一个逗号。这可能应该更改为c == ','字符 == 字符比较,而不是字符和字符串之间的比较。

  5. 然后在循环体中,整数n被附加到向量row。这会保存整数,以便当我们最后返回row时,这个整数将是一个元素。

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