上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 23 下一页
摘要: 之前介绍过常见的排序算法,可以查看这里之前实现的代码都是针对int型的算法,现在我将代码改写成了模板,这样可以应用于常见的一些类型。为了测试比较不同的排序算法,采用了两种计时方式。注意,下面的两段代码中,void(*_sort[])(T*,int) 是函数指针数组。1. 采用clock函数,统计排序算法所使用的时钟数代码如下: template<classT>voidclock_test(){void(*_sort[])(T*,int)={insert_sort,binary_insert_sort,shell_sort,shell_sort2,select_sort,select 阅读全文
posted @ 2012-07-02 01:10 Mr.Rico 阅读(1791) 评论(0) 推荐(0)
摘要: 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序期间全部对象个数太多,不能同时存放在内存,必须根据排序过程的要求,不断在内、外存之间移动的排序。内排序的方法有许多种,按所用策略不同,可归纳为五类:插入排序、选择排序、交换排序、归并排序、分配排序和计数排序。插入排序主要包括直接插入排序,折半插入排序和希尔排序两种;选择排序主要包括直接选择排序和堆排序;交换排序主要包括冒泡排序和快速排序;归并排序主要包括二路归并(常用的归并排序)和自然归并。分配排序主要包括箱排序和基数排序。计数排序就一种。稳定排序:假设在待排序的文件中,存在两个. 阅读全文
posted @ 2012-07-01 16:11 Mr.Rico 阅读(11312) 评论(2) 推荐(3)
摘要: 第17章 string基本字符序列容器 string常用 的函数http://www.cplusplus.com/reference/string/string/ 第18章 stack堆栈容器堆栈是一种适配器 堆栈的实现 由于C++ STL中堆栈是不预设大小的,所以在入栈的时候就不考虑堆栈空间是否为满,均将元素压入到堆栈,从而函数没有标明入栈成功与否的返回值。stack容器函数http://www.cplusplus.com/reference/stl/stack/ 第19章 queue队列容器 queue源代码 queue容器函数http://www.... 阅读全文
posted @ 2012-06-29 18:19 Mr.Rico 阅读(459) 评论(0) 推荐(0)
摘要: 第3篇 C++ STL 容器技术SGI STL代码主页:http://www.sgi.com/tech/stl/ 第6章 vector向量容器 stl_vector.h源代码vector常用的函数http://www.cplusplus.com/reference/stl/vector/ 第7章 deque双端队列容器 deque容器使用http://www.cpluspl... 阅读全文
posted @ 2012-06-29 12:52 Mr.Rico 阅读(585) 评论(0) 推荐(0)
摘要: 第1章 C++编程技术1.6 显示类型转换 4种显示类型转换的原型reinterpret_cast转换: const_cast转换: static_cast转换: dynamic_cast转换: 1.7 C++中的异常处理 多个try块与catch块的对应 捕捉任意类型的异常 异常类型列表,声明不抛出异常的情况违反异常类型列表抛出异常 另一种常用异常处理方法:继续抛出异常,让调用者处... 阅读全文
posted @ 2012-06-29 11:23 Mr.Rico 阅读(1100) 评论(0) 推荐(0)
摘要: 第5章 堆栈堆栈是一个后进先出(last-in-first-out, LIFO)的数据结构。1. 数组实现的堆栈源代码如下:View Code #include<iostream>usingnamespacestd;template<classT>classStack{public:Stack(intMaxStackSize=10);~Stack(){delete[]stack;}boolIsEmpty()const{returntop==-1;}boolIsFull()const{returntop==MaxTop;}TTop()const;Stack<T> 阅读全文
posted @ 2012-06-28 16:28 Mr.Rico 阅读(326) 评论(0) 推荐(0)
摘要: 第3章 数据描述 最常见的数据描述方法有:公式化描述、链接描述、间接寻址和模拟指针。 公式化描述借助数学公式来确定元素表中的每个元素分别存储在何处(如存储器地址)。 最简单的情形就是把所有元素依次连续存储在一片连续的存储空间中,这就是通常所说的连续线性表。 在链接描述中,元素表中的每个元素可以存储在存储器的不同区域中,每个元素都包含一个指向下一个元素的指针。同样,在间接寻址方式中,元素表中的每个元素也可以存储在存储器的不同区域中,不同的是,此时必须保存一张表,该表的第 i项指向元素表中的第 i个元素,所以这张表是一个用来存储元素地址的表。 ... 阅读全文
posted @ 2012-06-28 14:55 Mr.Rico 阅读(870) 评论(0) 推荐(0)
摘要: 第8章 仿函数(函数对象)第9章 STL算法9.1 非变动性算法string搜寻函数与STL搜寻算法的比较变动性算法排序算法几种排序算法的比较;第10章 特殊容器/容器适配器第11章 stringstring和C-string的关系第13章 以stream class来输入输出IOSTream中的一些操控器 阅读全文
posted @ 2012-06-28 00:42 Mr.Rico 阅读(166) 评论(0) 推荐(0)
摘要: 第5章 STL标准模板库5.1 STL中的各个组件STL的基本观念就是将数据和操作分离。而这种将数据和算法分开对待的考虑和面向对象的思想是矛盾的。5.2 容器序列容器Sequence containers和关联式容器Assocative containers严格来说,C++标准并未定义某一种容器的具体实现,然而标准却规定了对其行为和复杂度的要求,这让库的作者没有太多变化的余地。所以实际上各个实际版本之间只是在细节上有所差异。STL中的插入迭代器测试三种迭代器的代码:#include<iostream>#include<vector>#include<list> 阅读全文
posted @ 2012-06-28 00:34 Mr.Rico 阅读(189) 评论(0) 推荐(0)
摘要: 序言侯捷译序C++98标准之后,C++标准库进行了很大的扩充,STL被C++标准库。侯捷的STL三个阶段:String,IOSTREAM和Locale程序库第2章 C++及其标准程序库简介string和STL的不同设计原则,IOSTREAM库模板函数必须在头文件中以inline函数的形式来实现。这是由模板的特点所决定的。模板参数Notype Template参数 (非类型模板参数)Default Template参数(缺省模板参数)异常处理,其中涉及到stack unwinding(堆栈辗转开解)C++标准异常类别explicit禁止隐式转换的产生C++标准手册中的复杂度amortized(分 阅读全文
posted @ 2012-06-28 00:12 Mr.Rico 阅读(277) 评论(0) 推荐(0)
摘要: 第 1章 C语言 1 指针 C语言中定义字符串的两种形式: char a[]="hello world"; char *b="hello world"; 对于这两种形式的区别和联系可以使用下面的操作进行区别: (1)sizeof(a)=strlen(a)+1;//主要是C语言中对于字符串的存储特点,会自动的以'\0'作为结束标志。 sizeof(b)=4; (2)strlen(a)==strlen(b);//因为a和b其实都是定义了一个字符串。 (3)从实现的本质上看,a是一个数组,在进行程序编译之后是一个存在于符号表中,其对应的数组内存 阅读全文
posted @ 2012-06-27 22:56 Mr.Rico 阅读(978) 评论(0) 推荐(0)
摘要: 这是C++中所支持的两种初始化方式。复制初始化使用=符号,而直接初始化将初始化式放在圆括号中。(1)对于一般的内建类型,这两种初始化基本上没有区别。int a(5);//直接初始化int a=5;//复制初始化int a=int (5);//直接初始化(2)当用于类类型对象时,初始化的复制形式和直接形式有所不同:直接初始化直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数。复制初始化首先使用指定构造函数创建一个临时对象,然后使用复制构造函数将那个临时对象复制到正在创建的对象。string null_book = "9-999-99999-9 ";//copy-in 阅读全文
posted @ 2012-06-25 22:05 Mr.Rico 阅读(3643) 评论(0) 推荐(0)
摘要: 栈增长和大端/小端问题是和CPU相关的两个问题。在内存管理中,与栈对应是堆。对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;对于栈来讲,它的生长方式是向下的,是向着内存地址减小的方向增长。在内存中,“堆”和“栈”共用全部的自由空间,只不过各自的起始地址和增长方向不同,它们之间并没有一个固定的界限,如果在运行时,“堆”和 “栈”增长到发生了相互覆盖时,称为“栈堆冲突”,系统肯定垮台。在常见的x86中内存中栈的增长方向就是从高地址向低地址增长。我们可以通过一些代码来判断栈的增长方向:#include<stdio.h>staticintstack_dir;staticvoid 阅读全文
posted @ 2012-06-22 20:47 Mr.Rico 阅读(15075) 评论(3) 推荐(0)
摘要: 主要是利用位操作来判断每一位是否为1方法一:清除整数a最右边的1可以使用这个操作:a&(a-1)所以可以利用这个方法来得到1的个数:intcount_one(unsignedx){intcount=0;while(x){count++;x=x&(x-1);}returncount;}方法二:对整数进行移位,然后判断最后一位是否为1intcount_one2(unsignedx){intcount=0;inti=0;while(i<32){if((x>>i)&0x1)count++;i++;}returncount;}方法三:这个方法和方法二类似,只是每 阅读全文
posted @ 2012-06-21 22:57 Mr.Rico 阅读(2327) 评论(0) 推荐(0)
摘要: 今天下午参加民生银行总行的笔试,最后一个题是一个小的算法题。题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。并且要求是用两种方法。在网上搜索了一下,网上说这是2006年google的面试题。方法1:最简单,容易想到的就是双循环的那种,从前往后进行遍历,这种的复杂度是O(n^2)简单的C++代码如下:boolmethod1(conststring&s,char&c){intlen=s.size();inti;vector<bool>flag(len);for(inti=0;i<len;i++)flag[i]=true;for( 阅读全文
posted @ 2012-06-17 23:10 Mr.Rico 阅读(1690) 评论(0) 推荐(1)
上一页 1 ··· 10 11 12 13 14 15 16 17 18 ··· 23 下一页