摘要: 下面的阐述的内容只是对前辈经验的整理。由于早期计算机的内存容量很小,为了尽量节省空间,交换两变量值时不使用中间变量。但这可能暗藏着缺陷。有一个巧妙的函数 swap 是这样编写的:inline void swap(int &a, int &b){ a = a + b; //缺陷1: 可能产生上溢. b = a - b; a = a - b;}引发缺陷 1 的原因是,当 a 和 b 的值比较大,相加之和的实际值大于 int 类型所能表示的数值范围,此时产生上溢。当传入 swap 函数的实参来自同一变量时,将会引发另一个缺陷:int a = 2;// 缺陷 2: 传入同一变量, 变量 阅读全文
posted @ 2011-06-03 02:44 Atypiape 阅读(420) 评论(0) 推荐(0) 编辑
摘要: 搞笑版优点:多种功能,加快任务实现。缺点:多重性格,易得精神分裂。严肃版优点:对象可以调用多个基类中的接口。缺点:易产生二义性和钻石型继承问题。 阅读全文
posted @ 2011-06-03 02:00 Atypiape 阅读(1366) 评论(0) 推荐(0) 编辑
摘要: 重载(overload)是指在相同的作用域内,不同的函数使用相同的函数名,但函数的参数表不同(参数个数不同,或参数类型不同,或二者都不同)。调用的时候根据函数的参数表来区别不同的函数。覆盖(override)是指子类重新定义父类的虚函数。重新定义的函数与被覆盖的虚函数的函数名和参数表都一样,只是函数的实现不同。 阅读全文
posted @ 2011-06-03 01:32 Atypiape 阅读(375) 评论(0) 推荐(0) 编辑
摘要: 一个由C/C++编译的程序占用的内存分为以下几个区域:1、栈区(stack)由系统自动分配和释放,用于存放函数的参数值,局部变量值等。其在内存中是一块连续的存储区域,由低地址向高地址延伸。2、堆区(heap)由程序员分配和释放,若程序员不释放,则程序结束时可能由操作系统回收。其存储空间在内存中是不连续,分配方式类似于链表。 3、静态区(static)又称全局区,程序结束后由系统释放,用于存放全局变量和静态变量。初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量则存储在相邻的另一块区域。 4、文字常量区程序结束后由系统释放,用于存储常量,字符串常量就是放在这里的。5、程 阅读全文
posted @ 2011-06-03 01:08 Atypiape 阅读(1439) 评论(0) 推荐(0) 编辑
摘要: 分配方式:栈由系统自动分配和释放,用于存放函数的参数值,局部变量值等。堆由程序员分配和释放,若程序员不释放,可能在程序结束时由操作系统回收。分配效率:栈的分配效率比堆要高得多,但堆的使用更灵活。空间大小:栈是连续的一块内存区域,其空间较小,是在编译时就确定了的,易产生栈溢出。堆的内存区域是不连续的,其空间较大。碎片问题:堆的使用容易产生碎片,使程序效率降低。而栈则不存在这个问题。 阅读全文
posted @ 2011-06-03 00:48 Atypiape 阅读(418) 评论(0) 推荐(0) 编辑
摘要: 下面代码仅供本人复习所用,实用性N低,各位飘过吧~~哈哈:>//// 字符串转换为整数. // #include <cstdlib>#include <iostream>#include <string>long toInteger(const std::string &str){ bool isNegative = false; long result = 0; size_t i; const size_t length = str.length(); // // 跳过非数字或符号的字符. // for (i = 0; i < leng 阅读全文
posted @ 2011-06-01 20:19 Atypiape 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 下面代码仅供本人复习所用,实用性N低,各位飘过吧~~哈哈:>//// 求素数. //#include <cstdlib>#include <cmath>#include <iostream>#include <vector>#include <iomanip>typedef std::vector<unsigned long> Primer;//// 将 range 范围内的素数保存到向量 primer 中.// 当一个数除以 2 直到到它的平方根时都没有整除,则该数为素数. //void getPrimer(Pri 阅读全文
posted @ 2011-06-01 17:03 Atypiape 阅读(218) 评论(0) 推荐(0) 编辑
摘要: __int64 是有符号 64 位整数数据类型,也就是 C# 中的 long 和 SQL Server 中的 bigint,范围为 -2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807),存储空间占 8 字节。用于整数值可能超过 int 数据类型支持范围的情况。__int64是Microsoft自创的。要用 64 位整型的话,C 中本来就有自带long long,如下:#include <stdlib.h>#include <stdio.h>#include <limits.h 阅读全文
posted @ 2011-06-01 15:57 Atypiape 阅读(4298) 评论(0) 推荐(0) 编辑
摘要: 下面代码仅供本人复习所用,实用性N低,各位飘过吧~~哈哈:>//// 十进制转二进制. // #include <cstdlib>#include <iostream>#include <vector>//// 使用 unsigned long long 类型数值来表示二进制数,// 由于这样表示的二进制数位数有限,顾输入参数为 unsigned short 类型. //unsigned long long toBinary(unsigned short decimal) { long long binary = 0; long long carry 阅读全文
posted @ 2011-06-01 15:45 Atypiape 阅读(971) 评论(0) 推荐(0) 编辑
摘要: 下面代码仅供本人复习所用,实用性N低,各位飘过吧~~哈哈:>//// 杨辉三角. //// 杨辉三角除每行第一个元素和最后一个原始均为 1 外,// 其他元素等于它上面左右两边的元素之和. // #include <cstdlib>#include <iostream>#include <iomanip>#include <stdexcept>#include <ctime>const size_t ROWS = 10;//// 二维数组法. //void pascalTriangle_array(unsigned long ( 阅读全文
posted @ 2011-06-01 14:46 Atypiape 阅读(695) 评论(0) 推荐(0) 编辑
摘要: 使用setw(n)设置输出宽度时,默认为右对齐,如下:// include <iostream>// include <iomanip>std::cout << std::setw(5) << "1" << std::endl;std::cout << std::setw(5) << "10" << std::endl;std::cout << std::setw(5) << "100" << std:: 阅读全文
posted @ 2011-06-01 13:21 Atypiape 阅读(38880) 评论(0) 推荐(5) 编辑
摘要: 下面代码仅供本人复习所用,实用性N低,各位飘过吧~~哈哈:>//// 斐波那契数列. // // 斐波那契数列指的是类似于这样的一个数列:// 1, 1, 2, 3, 5, 8, 13, 21...// 该数列从第 3 项开始,每一项都等于前两项之和. //#include <cstdlib>#include <ctime>#include <iostream>#include <stdexcept>//// 递归方法计算斐波那契数列. // unsigned long fibonacci_recursion(const unsigned 阅读全文
posted @ 2011-05-31 17:12 Atypiape 阅读(575) 评论(0) 推荐(0) 编辑
摘要: 平时写 C/C++ 小程序的时候,不喜欢开VS,太庞大了,还要建项目。对于小程序,一个可以进行单文件编译的 IDE 是我的首选,我用的是 C-Free 5.0,内置编译器 MinGW,Windows 版 GCC。前几在 C-Free 5.0 上写排序程序,想看一下大概的执行时间,于是用 C 标准库函数 clock() ,结果包含的 time.h 头文件一直不能通过编译。把源代码复制到 VS 2008 里居然顺利编译通过,猜想这应该是编译器 MinGW 的问题,忍忍吧。前天把系统搞得一踏糟,无奈之下还原,今天找了个最新版的 MinGW 编译器,没想到 time.h 头文件的问题没了,爽。其实我用 阅读全文
posted @ 2011-05-30 16:47 Atypiape 阅读(11908) 评论(0) 推荐(1) 编辑
摘要: 下面代码仅供本人复习数据结构所用,实用性N低,各位飘过吧~~哈哈:>//// C++ 模版技术实现堆排序. // #include <cstdlib>#include <cstring> #include <iostream>#include <stdexcept>//// 堆化函数模版.// 当一棵二叉树除了根节点外,其子树都满足堆性质时,// 对根节点进行调整,使得整棵二叉树树都满足堆性质.//template <typename T>void heapify(T *array, size_t low, const size 阅读全文
posted @ 2011-05-28 23:53 Atypiape 阅读(644) 评论(0) 推荐(0) 编辑
摘要: 下面代码仅供本人复习数据结构所用,实用性N低,各位飘过吧~~哈哈:> 阅读全文
posted @ 2011-05-28 20:00 Atypiape 阅读(1293) 评论(0) 推荐(0) 编辑
摘要: 下面代码仅供本人复习数据结构所用,实用性N低,各位飘过吧~~哈哈:>//// C++模版技术实现快速排序. // #include <cstdlib>#include <cstring>#include <iostream> #include <stdexcept>//// 两值交换. //template <typename T>inline void swap(T &x, T &y){ T temp = x; x = y; y = temp;} //// 快速排序函数模版. // 以首元素为基准(pivot) 阅读全文
posted @ 2011-05-28 17:04 Atypiape 阅读(699) 评论(0) 推荐(0) 编辑
摘要: 下面代码仅供本人复习数据结构所用,实用性N低,各位飘过吧~~哈哈:>//// C++ 模版技术实现归并排序. // #include <cstdlib>#include <cstring> #include <iostream>#include <stdexcept>//// 归并操作. //template <typename T> void merge(T *array, const size_t low, const size_t mid, const size_t high){ if (NULL == array) { 阅读全文
posted @ 2011-05-28 15:17 Atypiape 阅读(2182) 评论(0) 推荐(0) 编辑
摘要: 下面代码仅供本人复习数据结构所用,实用性N低,各位飘过吧~~哈哈:>//// C++ 模版技术实现直接插入排序. // #include <cstdlib>#include <cstring> #include <iostream>template <typename T>void insertionSort(T *array, const size_t count){ T temp; for (size_t i = 1, j; i < count; ++i) { for (j = i, temp = array[j]; 0 < 阅读全文
posted @ 2011-05-28 00:09 Atypiape 阅读(978) 评论(0) 推荐(0) 编辑
摘要: 下面代码仅供本人复习数据结构所用,实用性N低,各位飘过吧~~哈哈:>//// C++ 模版技术实现直接选择排序. // #include <cstdlib>#include <cstring> #include <iostream>//// 首先在未排序序列中找到最小元素,存放到排序序列的起始位置,// 然后,再从剩余未排序元素中继续寻找最小元素,// 然后放到排序序列末尾. 以此类推,直到所有元素均排序完毕.//template <typename T>void selectionSort(T *array, const size_t c 阅读全文
posted @ 2011-05-27 23:33 Atypiape 阅读(976) 评论(0) 推荐(0) 编辑
摘要: 下面代码仅供本人复习数据结构所用,实用性N低,各位飘过吧~~哈哈:>//// C++模版技术实现鸡尾酒排序(改进的冒泡排序). // #include <cstdlib>#include <cstring>#include <iostream>template <typename T>void swap(T &x, T &y){ T temp = x; x = y; y = temp;}template <typename T>void cocktailSort(T *array, const size_t co 阅读全文
posted @ 2011-05-27 21:31 Atypiape 阅读(886) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示