随机整数列表

发布于 2024-11-03 03:56:58 字数 102 浏览 0 评论 0原文

如果我有一个在一行上用空格分隔的整数列表(例如: 50 34 1 3423 5 345),那么使它们成为单独的整数变量的最佳方法是什么 - 使用 收集整数列表辛

If I had a list of integers separated by a space on one line (eg: 50 34 1 3423 5 345) then what would be the best way of making each of them a separate integer variable - collecting the list of integers with cin?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

年少掌心 2024-11-10 03:56:59

在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
}

实例。

In follow-up to sehe's answer, here's how you'd do it a little more verbosely (ahem).

The algorithms sehe used basically do this internally. This answer is included mostly for clarity.

#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.

一场信仰旅途 2024-11-10 03:56:59

查看 strtok( )atoi( ) 的手册页

Have a look at the man pages for strtok( ) and atoi( )

辞旧 2024-11-10 03:56:58
#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 将重复将 operator>>(int&) 应用于引用的流(直到流)。默认情况下,这将默默地忽略空格,并且如果输入操作失败(例如遇到非整数输入),它将抛出异常。

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

std::vector<int> ints;
while (iss>>myint)
{
     ints.push_back(myint);
}
#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));

Done. If you really need to explicetely read line-wise:

#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));
}

An istream_iterator<int> will repeatedly apply operator>>(int&) to the referenced stream (until the end of the stream). By default this will silently ignore whitespace, and it will throw an exception if the input operation failed (e.g. non-integer input is encountered)

The back_inserter is an output iterator that you can use with all container types (like vector) that support the .push_back operation. So in fact what is written there in STL algorithmese is similar to

std::vector<int> ints;
while (iss>>myint)
{
     ints.push_back(myint);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文