C++拾遗--模板元编程

news/2024/5/20 1:29:08 标签: 模板元, 递归, 内联函数, 编译

                          C++拾遗--模板元编程

前言

    模板元是用于递归加速的,把运行期的函数调用变到编译期进行代码展开,类似于内联函数。下面看一个实例:斐波那契数列第n项求解。

模板元编程

#include <iostream>
#include <ctime>
using namespace std;
//递归法
int fib(int n)
{
	if (n < 0)
		return 0;
	if (n == 1 || n == 2)
		return 1;
	return fib(n - 1) + fib(n - 2);
}
//模板元
template<int N>
struct Data
{
	enum{ res = Data<N-1>::res + Data<N-2>::res };
};
template<>
struct Data<1>
{
	enum{ res = 1 };
};
template<>
struct Data<2>
{
	enum{ res = 1 };
};
int main()
{
	cout << "******模板元编程***by David***" << endl;
	time_t start, end;
	start = clock();
	cout << fib(40) << endl;
	end = clock();
	cout << "递归法耗时" << end - start << "ms" << endl;
	start = clock();
	cout << Data<40>::res << endl;
	end = clock();
	cout << "模板元法耗时" << end - start << "ms" << endl;
	cin.get();
	return 0;
}
运行



总结:

递归法耗时较久。模板元法的运行时间是有问题的,在VS上把鼠标移到Data<40>::res时就可以看到结果。




本专栏目录

  • C++拾遗 目录

所有内容的目录

  • CCPP Blog 目录




http://www.niftyadmin.cn/n/1802118.html

相关文章

C++拾遗--智能指针

C拾遗--智能指针 前言 内存泄露是常见的问题&#xff0c;新标准中的智能指针从根本上解决了这个问题。所谓的智能指针&#xff0c;其智能性体现在&#xff1a;当没有对象使用某块动态分配的内存时&#xff0c;那就自动释放这片内存。 智能指针 下面这段程序可耗尽内存&#…

C++拾遗--malloc free与new delete的同与不同

C拾遗--malloc free与new delete的同与不同 前言 在C中我们常使用malloc和free来动态分配与释放内存&#xff0c;在C中对应的是new和delete。这里我们来探讨下他们的同与不同。 正文 1.内置类型 对相同的代码进行调试&#xff0c;查看内存 #include <iostream> using…

C++拾遗--new delete 重载

C拾遗--new delete 重载 前言new和delete是操作动态内存的一对操作。对它们重载可以对内存管理进行有效的定制。 正文 1.局部重载 特别针对某一类型&#xff0c;对new和delete进行重载&#xff0c;可以对该类型对象的动态创建实行监控。如下代码&#xff1a; 代码一#include &l…

C++拾遗--定位new表达式

C拾遗--定位new表达式 前言 new表达式&#xff0c;默认下把内存开辟到堆区。使用定位new表达式&#xff0c;可以在指定地址区域(栈区、堆区、静态区)构造对象&#xff0c;这好比是把内存开辟到指定区域。 正文 定位new表达式的常见形式 new(address) type;new(address) type…

C++拾遗--引用(左值引用、右值引用)

C拾遗--引用 前言 引用就是别名(alias)。所谓别名&#xff0c;就是对已存在的对象另起一个名字。本身含义并不难理解&#xff0c;但与其它概念一组合&#xff0c;就成了使用难点。再加上新标准提出了新的一种引用-右值引用&#xff0c;引用这一概念就变得更加难以理解和使用。…

C++拾遗--虚函数表

C拾遗--虚函数表 前言 C的多态依赖虚函数来实现。若类存在虚函数&#xff0c;则每一个类的实例都维护了一个地址&#xff0c;这个地址指向虚函数表。虚函数表中存放的是类中所有虚函数的地址。下面我们找出虚函数表的地址&#xff0c;从而获得每个虚函数的地址&#xff0c;然后…

C++拾遗--多线程:C语言多线程的引入

C拾遗--多线程&#xff1a;C语言多线程的引入 前言 多线程是编程中的一个重要内容。多核时代使多线程成为一种可能&#xff0c;显然&#xff0c;一件事情多个人干&#xff0c;效率一定会提升。下面来看下C语言中是如何使用多线程的。 正文 1.CreateThread 先来看一个实例 #…

C++拾遗--多线程:原子操作解决线程冲突

C拾遗--多线程&#xff1a;原子操作解决线程冲突 前言 在多线程中操作全局变量一般都会引起线程冲突&#xff0c;为了解决线程冲突&#xff0c;引入原子操作。 正文 1.线程冲突 #include <stdio.h> #include <stdlib.h> #include <process.h> #include &l…