我想知道如何在一行上接受多个数字,而不需要事先准确地知道数量。
例如,如果我输入
但是如果我不知道数量是4,那么我就不能使用这种方法。将输入存储到向量中的正确方式是什么?
例如,如果我输入
1 2 3 4
,我可以使用以下方法:std::cin >> a >> b >> c >> d;
但是如果我不知道数量是4,那么我就不能使用这种方法。将输入存储到向量中的正确方式是什么?
您可以使用类型为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 );
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,
CTRL
+D
终止输入,或者使用 getline()
获取单行文本再进行分词。 - bobahint x;
while ( cin>>x )
vec.push_back(x);