zoukankan      html  css  js  c++  java
  • C++ 编译期计算

    C++ 编译期计算

    模板元编程是个强大的工具,据说足以作为一门完备的语言了。这里只是简单记录一下,利用模板实现编译期计算的方式。

    sum([1,...n])

    #include <stdio.h>
    
    // 递推公式
    template<int n>
    class Sum {
    public:
        static const int value = n + Sum<n-1>::value;
    };
    
    // 边界值特化
    template <>
    class Sum<0> { // 注意 0 的位置
    public:
        static const int value = 0; // 注意全都是静态常量,才能保存到binary中const区
    };
    
    int main() {
        printf("%d
    ", Sum<100>::value);
    }
    

    斐波那契数列

    template <int num>
    class Fibonacci {
    public:
        static const int value = Fibonacci<num - 1>::value + Fibonacci<num - 2>::value;
    };
    
    template <>
    class Fibonacci<0> {
    public:
        static const int value = 0;
    };
    
    template <>
    class Fibonacci<1> {
    public:
        static const int value = 1;
    };
    

    组合数

    template <int n, int m>
    class Combinatorial {
    public:
        static const int value = Combinatorial<n - 1, m>::value + Combinatorial<n - 1, m - 1>::value;
    };
    
    template <int m>
    class Combinatorial<0, m> {
    public:
        static const int value = 0;
    };
    
    template <int n>
    class Combinatorial<n, 0> {
    public:
        static const int value = 1;
    };
    
    template <>
    class Combinatorial<0, 0> { // 可以同时匹配 <0,m> 和 <n,0> 的 <0,0> 需要特别给出
    public:
        static const int value = 1;
    };
    
  • 相关阅读:
    expdp定时备份
    设计模式简介
    利用Python制作万年历
    Linux下Python的安装
    排序算法-直接插入排序
    排序算法-冒泡排序
    数据结构-循环顺序队列&链队列
    数据结构-栈&链栈
    数据结构-双向链表&双向循环链表
    数据结构-单链表&单循环链表
  • 原文地址:https://www.cnblogs.com/zhcpku/p/15202871.html
Copyright © 2011-2022 走看看