求C++模板运算1..n累加的代码

__GUNS_N_ROSES__ 2012-03-05 05:26:16
RT,既然C++ Template 图灵完备,那作一些简单的数值运算应该不成问题,累加的模板运算代码我在哪本书上看到过,不过在下才疏学浅,已经忘掉要怎么写了。

其实我的主要目的是想增加编译花费时间,毫无疑问最简单的办法就是增加模板计算量,希望大大们能够不吝提供。

如有可以编译3秒、5秒、10+秒的C++代码也请不吝提供一下,要单个文件代码,测试用。

补充:我指的的累加是交给编译器进行运算的,不然也没有必要用模板,这点请留意一下。

...全文
363 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
__GUNS_N_ROSES__ 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cxsjabcabc 的回复:]

C/C++ code


template <int N>
struct Factorial
{
enum { value = N * Factorial<N - 1>::value };
};

template <>
struct Factorial<0>
{
enum { value = 1 };
};

// Factorial<4>::value == 24
……
[/Quote]

连乘没递归几次就先数据溢出了呵呵。
虚拟机里递归深度到10000左右大概可以编译3秒种左右,非常感谢楼上二位,都解决问题了。

有没有浅递归或者非递归但同时能长时间编译的书写方法呢?
__GUNS_N_ROSES__ 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bluewanderer 的回复:]

不过只能VC用,GCC貌似没有强制inline的办法。Max到1024以上就可以慢慢等了
C/C++ code
template <int Max>
__forceinline void find(int **in_a, int in_size, int in_key)
{
if (in_size == 0)
{
return;
}

if (……
[/Quote]

gcc据说是有强制inline的,不过不能对递归程序使用
程序员小迷 2012-03-05
  • 打赏
  • 举报
回复


template <int N>
struct Factorial
{
enum { value = N * Factorial<N - 1>::value };
};

template <>
struct Factorial<0>
{
enum { value = 1 };
};

// Factorial<4>::value == 24
// Factorial<0>::value == 1
void foo()
{
int x = Factorial<4>::value; // == 24
int y = Factorial<0>::value; // == 1
}

bluewanderer 2012-03-05
  • 打赏
  • 举报
回复
不过只能VC用,GCC貌似没有强制inline的办法。Max到1024以上就可以慢慢等了
template <int Max>
__forceinline void find(int **in_a, int in_size, int in_key)
{
if (in_size == 0)
{
return;
}

if (Max == 0)
{
return;
}

{
int m = in_size / 2;

if ((*in_a)[m] >= in_key)
{
find<Max / 2>(in_a, m, in_key);
}
else
{
*in_a = *in_a + m + 1;

find<Max - Max / 2 - 1>(in_a, in_size - (m + 1), in_key);
}
}
}
bluewanderer 2012-03-05
  • 打赏
  • 举报
回复
其实二叉树遍历的模板函数加__forceinline能直接把VC卡死
bluewanderer 2012-03-05
  • 打赏
  • 举报
回复
#include <iostream>

template <int X>
struct A
{
static const int value = A<X - 1>::value + X;
};

template <>
struct A<1>
{
static const int value = 1;
};

int main()
{
std::cout << A<10>::value << std::endl;
}

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧