【发布时间】:2014-02-27 07:01:18
【问题描述】:
在任意类型、数组或向量中生成从 0 到 n-1 的数字时,可接受的 C++ 习语是什么?
换句话说,我该怎么写:
template <typename T> vector<T> generate_integers_upto(size_t n);
或
template <typename T> T* generate_integers_upto(size_t n);
【问题讨论】:
-
你会写:
std::vector<T> x(n); std::iota(x.begin(), x.end(), T()); -
你真的需要对象同时存在吗?如果没有,请使用 Boost.Range:
template< class T > iterator_range< counting_iterator<T> > generate_integers_upto(size_t n) { return counting_range<T>(0, n); } -
@SteveJessop Boost::Range 库(以及迭代器)应该被添加到标准库中。我总是怀念标准库中那种高级数字抽象。
-
@Manu343726:我认为有些细节是困难的,比如管理你最终会遇到的各种重载算法,这些算法已经有多种形式,带有可选的谓词等等。