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

What is the logic behind while(sline >> n >> c && c== ',')?

本文关键字:gt 是什么 背后 sline while      更新时间:2023-10-16
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;
}

这是从文件中读取 2d 矢量的功能之一。我想知道while循环背后的逻辑。

这按顺序按以下代码顺序执行了几件事:

  1. sline >> n将整数从sline读取到变量n。重要的是,这也返回sline.

  2. 我们现在有效地sline >> c将字符从sline读取到可变c

  3. 仅当双方都为 true 时,&&运算符才返回 true。sline >> c将再次返回sline只要还有字符可供读取,该值就会计算为 true。

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

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

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