将固定数量的元素从输入流复制到矢量中

Copying a fixed number of elements from an input stream into a vector

本文关键字:复制 输入流 元素      更新时间:2023-10-16

给定以下程序:

#include <vector>
#include <iostream>
using namespace std;
int main()
{
    unsigned n;
    vector<double> xvec;
    cin >> n;
    while (xvec.size() < n)
    {
        double x;
        cin >> x;
        xvec.push_back(x);
    }
    return 0;
}

有没有办法使用 STL 编写它而无需显式 while 循环(例如,使用 copy() 算法和插入器?

当在运行时读取元素数量时,我还没有找到一种方法来做到这一点(如这里的变量"n")。

以下是将

n double s 复制到向量的一种方法:

#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>
int main()
{
    unsigned n;
    std::vector<double> xvec;
    std::cin >> n;
    xvec.reserve(n);
    std:generate_n(std::back_inserter(xvec), n,
      []() { double d; std::cin >> d; return d; });
    std::copy(xvec.begin(), xvec.end(),
      std::ostream_iterator<double>(std::cout, " "));
    std::cout << "n";
    return 0;
}

注意:这种使用 std::copy_n 的替代方法不起作用:

std::copy_n(std::istream_iterator<double>(std::cin),
    n,
    std::back_inserter(xvec));

这实际上读取n+1元素,但只复制其中n个元素(至少在 g++ 4.6.3 上)。


注2:将答案限制为C++98,这里有一个可能的解决方案:

double GetD() { double d; std::cin >> d; return d; }
...
std:generate_n(std::back_inserter(xvec), n, GetD);