如何将单行数读入不同的变量?

时间:2014-02-06 22:00:50

标签: c++ xcode variables cin

程序看起来像:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    //Code

    int num1, num2, num3, num4, num5, num6;


    int num[6] = { num1, num2, num3, num4, num5, num6 };

    cout << "Enter one line containing at least 6 integers." << endl;

    getline(cin, num);

输入线:1 2 87 1 2 123 44

我需要将每个数字存储到变量Num1,Num2,Num3等中。

1 个答案:

答案 0 :(得分:4)

从输出消息中,您似乎期望至少 6个整数作为输入。这意味着您需要一个可以添加任意数量元素的容器,例如std::vector<int> Nums;。然后,您可以使用std::copyint中提取cin并将其推送到带std::back_inserter的向量中:

std::copy(std::istream_iterator<int>(std::cin),
          std::istream_iterator<int>(),
          std::back_inserter(Nums));

See it in action

这里可能有一些你不熟悉的合理数量的东西:

  1. std::copy是一种从一个范围复制到另一个范围的算法。前两个参数表示要复制的范围的开头和结尾,第三个参数表示要复制到的范围的开头。
  2. std::istream_iterator是一个迭代器类型,它在您递增时从流中提取。
  3. std::istream_iterator<int>(std::cin)构造一个从int
  4. 中提取std::cin的迭代器
  5. std::istream_iterator<int>()构造一个特殊的 end-of-stream 迭代器。它代表任意流的结束。这意味着copy算法在到达流末尾时将停止。
  6. std::back_inserter创建另一个迭代器,在每次分配给它的容器上调用push_back。由于copy算法将为此迭代器分配从流中提取的int,它会将它们全部推送到向量Nums
  7. 如果这太复杂了,这是另一个使用较少库组件的版本:

    int val;
    while (std::cin >> val) {
      Nums.push_back(val);
    }