Ниже приведен фрагмент тестового кода, который я написал, чтобы проверить мое понимание того, как работает stringstream:
#include<iostream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
using std::cout;
using std::endl;
using std::vector;
using std::string;
using std::stringstream;
using std::for_each;
int main (void){
string s1 = "5";
string s2 = "1 4 -1 6 0";
vector<int> v;
int val = 0;
stringstream ss(s1);
ss >> val;
cout << "val: " << val << endl;
ss.str(s2);
while(val > 0){
ss >> val;
cout << "val: " << val << endl;
v.push_back(val);
}
for_each(v.begin(), v.end(), [](int& i){cout << i << endl;});
return 0;
}
Когда код скомпилирован:
g ++ -ggdb -std = c ++ 14 -Wall <filename.cpp>
и запустите, значение s1
извлекается и вводится в val
.
Во втором случае попытка последовательно извлечь из s2
и ввести в val
не работает. val
сохраняет значение, введенное в него из s1
, и, следовательно, цикл работает бесконечно. Условие проверки цикла, т.е. val > 0
, основано на следующем:
Если извлечение завершается неудачно, в значение записывается ноль, и бит сбоя устанавливается.
Ссылка: std :: basic_istream :: operator >>
Что мне здесь не хватает?
ТИА