随机整数列表

时间:2011-04-24 20:26:54

标签: c++ string list integer

如果我有一个由一行上的空格分隔的整数列表(例如:50 34 1 3423 5 345)那么将每个整数变量作为单独的整数变量的最佳方法是什么 - 收集整数列表cin

3 个答案:

答案 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
}

Live example.

答案 2 :(得分:0)

查看strtok( )atoi( )

的手册页