如果我有一个由一行上的空格分隔的整数列表(例如:50 34 1 3423 5 345)那么将每个整数变量作为单独的整数变量的最佳方法是什么 - 收集整数列表cin
?
答案 0 :(得分:8)
#include <iostream>
#include <vector>
#include <iterator>
std::vector<int> ints;
std::copy(std::istream_iterator<int>(cin),
std::istream_iterator<int>(),
std::back_inserter(ints));
完成。如果你真的需要在线上阅读:
#include <sstream>
#include <iostream>
#include <vector>
#include <iterator>
std::string singleline;
std::istringstream iss; // out of loop for performance
while (std::getline(cin, singleline))
{
iss.str(singleline);
std::copy(std::istream_iterator<int>(iss),
std::istream_iterator<int>(),
std::back_inserter(ints));
}
istream_iterator<int>
将重复应用operator>>(int&)
到引用的流(直到流的末尾)。默认情况下,这将默认忽略空格,如果输入操作失败(例如遇到非整数输入),它将抛出异常
back_inserter是一个输出迭代器,可以与支持vector
操作的所有容器类型(如.push_back
)一起使用。所以实际上STL算法中的内容类似于
std::vector<int> ints;
while (iss>>myint)
{
ints.push_back(myint);
}
答案 1 :(得分:7)
在回答sehe的回答时,以下是你如何更详细地做到这一点( ahem )。
使用基本的算法在内部执行此操作。这个答案主要是为了清楚起见。
#include <iostream>
#include <vector>
int main()
{
std::vector<int> myInts;
int tmp;
while (std::cin >> tmp) {
myInts.push_back(tmp);
}
// Now `myInts` is a vector containing all the integers
}
答案 2 :(得分:0)
查看strtok( )
和atoi( )