c++ - 元编程,阶乘,C++,boost

标签 c++ boost metaprogramming

需要计算从 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/

相关文章:

c++ - 以特定排列连接字符串的字符

c++ - 服务器重启后重新连接到 QDBus 服务器(Qt C++)

c++ - 我可以使用 STL 分配器将整个 STL 容器及其内容(键和值)存储在我创建的内存块中吗?

c++ - boost optional 和 std::experimental optional assignment 之间的区别

python - 如何在传递参数的所有类函数调用之前/之后运行方法?

c++ - 部分专用类上的标记调度与静态方法

c++ - 迭代中的指针算法是否溢出安全?

c++ - Armadillo的cx_mat和Boost的odeint编译报错

ruby - 动态救援条款,此代码如何工作?

c++ - 如何返回包含 PyObject* 的 boost::python::tuple?