ilovecpp的建议超赞! 感谢。
按照这个思路,我的代码改为:
#include <string>
#include <iostream>
#include <sstream>
#include <vector>
#include <iterator>
using namespace std;
template <typename T>
void cin_fill(back_insert_iterator<T> bit)
{
string line;
while (true)
{
getline(cin, line);
if (!line.empty())
{
istringstream ss{line};
for (;;)
{
typename T::value_type n;
ss >> n;
if (!ss)
break;
bit=n;
}
} else break;
}
}
#include <algorithm>
int main(void)
{
{
vector<int> vec;
cin_fill(back_inserter(vec));
std::copy(std::cbegin(vec), std::cend(vec), std::ostream_iterator<int>{std::cout, " "});
std::cout << std::endl;
}
{
vector<std::string> vec;
cin_fill(back_inserter(vec));
std::copy(std::cbegin(vec), std::cend(vec), std::ostream_iterator<std::string>{std::cout, " "});
std::cout << std::endl;
}
return 0;
}
/***
12 34 56
78 q 90
12 34 56 78
^C
*/
【 在 ilovecpp 的大作中提到: 】
: 不建议把输入格式设计成这样。就像我前面说的,linux文件里没有EOF字符,你这样搞,如果输入是从文件重定向的就根本没法输入了。
: 比如,你可以用回车表示一组数据结束:
: string line;
: ...................
--
修改:ActiveIon FROM 111.201.151.*
FROM 61.149.156.*