需要计算从 1 到 k 的所有数字的阶乘,并使用 boost/mpl 将它们保存在 mpl 容器中。
在 range_c 中存储的这个 nums 的范围。
困难在于我必须存储所有以前的值:
k! = (k-1)!*k
我认为我将在 mpl::vector_c 中存储以前的值,即每次迭代我将从源 range_c 中获取值并将其与包含在 vector_c 中的先前值 (k-1)!
相乘,但我在这段代码中有很多错误:
namespace mpl = boost::mpl;
const int border = 10;
using namespace mpl;
typedef
range_c <int, 1, border>
Numbers;
typedef vector_c<int, 1> data;
typedef
mpl::transform
<
Numbers,
data,
push_back<data, multiplies <_, _>>,
back_inserter
<
mpl::vector <>
>
>::type
Factorials;
最佳答案
在所有实现中,阶乘都是针对从 1 开始的每个数字计算的。在任务中,我需要通过与前一个阶乘相乘来计算每个下一个阶乘。这里是正确的代码:
namespace mpl = boost::mpl;
using namespace mpl;
const int border = 15;
typedef range_c<int, 1, border> nums;
typedef vector<int_<1>> data;
typedef mpl::fold<
nums, data,
mpl::push_back<_1, mpl::multiplies<_2, back<_1>>>
>::type Factorials;
关于c++ - 元编程,阶乘,C++,boost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30465001/