我想知道如何在一条线路上接受多个号码而不事先知道多少。
例如,如果我输入1 2 3 4
,我可以使用:
cin >> a >> b >> c >> d;
但如果我不知道金额是4那么我就不能使用那种方法。将输入存储到向量中的正确方法是什么?
提前致谢
答案 0 :(得分:7)
您可以读取所有输入,直到std :: string类型的对象中的新行字符,然后从该字符串中提取数字并将它们放置在矢量中。
这是一个随时可用的示例
#include <iostream>
#include <sstream>
#include <iterator>
#include <string>
#include <vector>
int main()
{
std::string s;
std::getline( std::cin, s );
std::istringstream is( s );
std::vector<int> v( ( std::istream_iterator<int>( is ) ), std::istream_iterator<int>() );
for ( int x : v) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
如果您要输入一行数字
1 2 3 4 5 6 7 8 9
然后矢量的程序输出将是
1 2 3 4 5 6 7 8 9
在这个程序中,您可以替换语句
std::vector<int> v( ( std::istream_iterator<int>( is ) ), std::istream_iterator<int>() );
的
std::vector<int> v;
int x;
while ( is >> x ) v.push_back( x );
答案 1 :(得分:0)
把它放在一个循环中:
int x;
while ( cin>>x )
vec.push_back(x);
答案 2 :(得分:0)
<强> main.cc 强>
#include <iostream>
#include <iterator>
#include <vector>
#include <algorithm>
#include <sstream>
int main() {
std::vector<int> vec;
std::string line;
if(!std::getline(std::cin, line)) return 1;
std::istringstream iss(line);
std::copy(std::istream_iterator<int>(iss),
std::istream_iterator<int>(),
std::back_inserter(vec));
std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, ", "));
return 0;
}
<强>标准输入强>
1 2 3 4 5
<强>标准输出强>
1, 2, 3, 4, 5,