std::stringstream:求教

std::stringstream: seeking advice

下面是我写的一段测试代码,用来验证我对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 输入的值,因此无限循环 运行s。循环的测试条件,即 val > 0,基于以下内容:

If extraction fails, zero is written to value and failbit is set.

参考:std::basic_istream::operator>>

我在这里错过了什么?

TIA

What am I missing here?

在行ss.str(s2);之前添加ss.clear();以清除此处由ss >> val;

设置的EOF的错误标志

执行后会产生:

val: 5
val: 1
val: 4
val: -1
1
4
-1