3

给定以下程序:

#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',here)。

4

1 回答 1

2

这是将 s 复制n double到向量中的一种方法:

#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);
于 2012-09-20T16:59:23.057 回答