鉴于以下计划:
#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',此处)。
答案 0 :(得分:2)
以下是将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);