随机整数列表

pig*_*d10 1 c++ string integer list

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

seh*_*ehe 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));
Run Code Online (Sandbox Code Playgroud)

完成.如果你真的需要明智地阅读:

#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));
}
Run Code Online (Sandbox Code Playgroud)

一个istream_iterator<int>会重复应用operator>>(int&)到引用流(直到流的末尾).默认情况下,这将默认忽略空格,如果输入操作失败(例如遇到非整数输入),它将抛出异常

back_inserter是一个输出迭代器,可以与vector支持该.push_back操作的所有容器类型(如)一起使用.所以实际上在STL算法中写的是类似的

std::vector<int> ints;
while (iss>>myint)
{
     ints.push_back(myint);
}
Run Code Online (Sandbox Code Playgroud)

  • @Pete我不同意.这正是初学者应该使用的代码类型.初学者编写的代码越少越好. (4认同)

Lig*_*ica 7

在对sehe的答案的后续行动中,这里是你如何更详细地(咳咳).

所使用的算法基本上都在内部执行.这个答案主要是为了清楚起见.

#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
}
Run Code Online (Sandbox Code Playgroud)

实例.