最近无聊,写了一个基于C++模板的求前n个质数的程序。
编译速度极其之慢。。
不过运行速度相当可以。
恩。如果C++的模板再多一点关键字的话,就可以看做是Lisp语言了。。
不过话说回来,引用一下老刘的话:
marchliu 写道
C++模板语法只差一步,只要加入类似Lisp关键字的一些东西,就可以让模板方便的控制编译过程了。
但是,在这之前,C++就已经太笨重了。
C++已经到了悬崖边上了,现在委员会决定再向前迈一步……
下面贴上代码做备忘:
#include <iostream>
template <int p, int i>
struct is_prime{
enum {
result = (p == 2) || (p % i) && is_prime<(i>2?p:0), i-1>::result
};
};
template <>
struct is_prime<0, 0>{
enum {
result = 1
};
};
template <>
struct is_prime<0, 1>{
enum {
result = 1
};
};
template <>
struct is_prime<1, 0>{
enum {
result = 0
};
};
template <int, int> struct If;
template <int> struct next_prime;
template <int i>
struct If<1, i>{
enum {
result = i
};
};
template <int i>
struct If<0, i>{
enum {
result = next_prime<i>::result
};
};
template <int i>
struct next_prime{
enum {
result = If<is_prime<i + 1, i>::result, i + 1>::result
};
};
template <int i, int j>
struct loop{
enum {
result = loop<i - 1, next_prime<j>::result>::result + next_prime<j>::result
};
};
template <>
struct loop<0, 2>{
enum {
result = 2
};
};
template <int sum, int prime, int i>
struct num_of{
enum {
result = num_of<sum + next_prime<prime>::result, next_prime<prime>::result, i - 1>::result
};
};
template <int sum, int prime>
struct num_of<sum, prime, 0>{
enum {
result = sum
};
};
int main(){
//std::cout << loop<10000>::result << std::endl;
//std::cout << next_prime<3>::result << std::endl;
std::cout << num_of<0, 0, 5>::result << std::endl;
return 0;
}
还是很晦涩啊。。
分享到:
相关推荐
《C++模板元编程技术与应用》是一本深入探讨C++模板元编程的书籍,旨在让更多的C++程序员了解并掌握这一技术,从而在编程过程中提高效率和代码质量。模板元编程是C++中一种强大的静态编译时编程技术,它允许程序员在...
为了更好地理解C++模板元编程的核心概念和技术细节,下面通过一个具体的例子来展开讨论: ```cpp // 主模板 template<int N> struct Fib { enum { Result = Fib<N - 1>::Result + Fib<N - 2>::Result }; }; // ...
文档中提及的代码片段,如最大公约数的模板实现、快速幂算法、扩展欧几里得算法、基本预处理和线性筛素数等,都是C++模板编程中具体的实现方法和技术细节。通过这些模板的实例化,可以生成适用于不同数据类型和需求...
- **求素数个数的类.exe**:与求素数个数的类源代码相对应的可执行程序,便于验证和调试代码。 2. 实践与应用: - 学习者可以逐一运行这些代码,观察程序输出,加深对C++语法和概念的理解。 - 通过修改和扩展...
【标题】"蓝桥杯国赛题之C++质数的后代"涉及到的是一个编程竞赛中的问题,主要考察参赛者对C++编程语言的理解以及在算法设计上的能力,特别是关于质数及其特性的运用。蓝桥杯国赛是全国知名的编程竞赛,旨在提升大...
总结来说,C++元编程和Boost编程库中的MPL是C++编程中非常强大的工具,它们利用了C++模板的特性,在编译阶段进行计算和代码生成,使得程序员能够在程序设计阶段就进行高度优化和抽象。这些技术的应用极大地丰富了C++...
数值计算和数据处理是编程常见的任务,如级数和、方差、函数模板中的三个排序等,这些习题让学生掌握如何处理各种数学运算和数据结构。字符串处理也是C++中重要的一部分,题目中包含了字符串比较、字符串排序、字符...
这个压缩包中包含的100个小程序旨在帮助学习者深入理解和掌握C语言及部分C++的基础知识,同时也涉及到了算法设计和问题解决策略。 1. **C和C++语言基础**:C和C++是两种密切相关的编程语言,C++是在C语言的基础上...
在“C++学习线路图”中,我们不仅探讨了C++的学习路径,还深入解析了算法的基础概念及其实现,尤其聚焦于计数、求和、求阶乘等简单算法,以及更复杂的求最大公约数、最小公倍数、判断素数和验证哥德巴赫猜想的算法。...
学习C++的过程是一个系统性的旅程,需要按照一定的顺序和路径进行。以下是一个推荐的C++学习路线图: 首先,从《C++ Primer》开始。这本书是C++初学者的入门经典,它详细介绍了C++的基础语法,包括变量、类型、控制...
5. **前n个素数乘积模一个很大很大的值** ```c++ #include using namespace std; int main() { int n, b, i = 4, j = 3; long long cj = 6; // 示例代码片段,实际实现略 } ``` 以上内容总结了C/C++...
通过这个实验,学生应该能够熟练地掌握C++的输入/输出操作,格式化输出的技巧,理解模板的概念和使用,以及文件操作的基本方法。同时,实验也锻炼了学生的编程能力和问题解决能力,特别是在面向对象编程的上下文中。
2. **《C++标准程序库》**:在掌握了基本的C++语法后,了解C++的标准库是非常重要的,这包括对各种容器、算法和迭代器的理解与运用。 3. **《C++编程思想》**:这本书深入浅出地讲解了C++的设计原则和高级编程技术...
2. 编写一个for循环,打印1到100之间的所有质数。 3. 设计一个嵌套循环,实现9x9乘法表的打印。 **三、函数** 函数是C++程序设计的基础模块,可以封装代码、提高复用性。试题可能涉及函数定义、调用、参数传递等:...
C语言程序设计C标准模板库PPT课件涵盖了泛型程序设计、命名空间、容器、适配器、迭代器和算法等核心概念,这些都是C++编程中的重要组成部分。 泛型程序设计是C++中的一项重要特性,它允许编写不依赖于特定数据类型...
在例10-1中,程序利用向量来存储和处理质数,显示了向量在动态存储数据方面的灵活性。 总的来说,C++标准模板库提供了一个强大的工具箱,使得C++程序员能够更高效地编写代码,同时保持代码的模块化和可重用性。通过...
我们可以创建一个模板函数,该函数接受一个整数N作为参数,然后找出并返回2到N之间所有的质数。为了实现这个功能,我们需要以下步骤: 1. **检查质数**:对于每个数字i从2到N,我们需要判断它是否为质数。一个简单...