摘要: 【1】插入排序 (1)基本概念 插入排序的时间复杂度为O(n^2)。 插入排序是稳定的排序方法(参见随笔《常用排序算法稳定性分析》)。 插入排序算法适用于少量数据的排序。 在此,我们只研究直接插入排序和二分插入排序。 (2)排序逻辑 <1>直接插入排序 直接插入排序是由两层嵌套循环组成的。外层循环标 阅读全文
posted @ 2013-01-09 12:06 kaizenly 阅读(744) 评论(0) 推荐(0) 编辑
摘要: 【1】选择排序理论 (1)基本概念 选择排序的时间复杂度为O(n*n)。(参见《算法复杂度》) 选择排序是不稳定的排序方法(参见《常用排序算法稳定性分析》)。 选择排序最大的优点是赋值的次数少,这个是其它算法无法比拟的。 (2)排序逻辑 每一趟从待排序的数据元素中选出最小(或最大)的一个元素; 顺序 阅读全文
posted @ 2013-01-09 11:25 kaizenly 阅读(686) 评论(0) 推荐(0) 编辑
摘要: 【1】算法复杂度 同一个问题可用不同的算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。 算法复杂度分为时间复杂度和空间复杂度。 时间复杂度是度量算法执行的时间长短;而空间复杂度是度量算法所需存储空间的大小。 【2】时间复杂度 (1)时间频度 一个算 阅读全文
posted @ 2013-01-08 20:54 kaizenly 阅读(2506) 评论(1) 推荐(0) 编辑
摘要: 【1】对象与变量变量是变量,对象归对象。二者不可混为一谈(许多资料书把两者没有明确区分)。个人认为,由类直接创建的称为对象。由内部数据类型定义的称为变量。另外,一个对象包含许多成员变量和成员函数。下面就对象与变量的对比实现示例代码如下: 1 #include 2 using namespace std; 3 4 /* 5 *自定义整型类 6 */ 7 class Int 8 { 9 private: 10 int num; 11 12 public: 13 Int(int x = 0):num(x) //默认复合构造函数 14 { 15 ... 阅读全文
posted @ 2013-01-08 10:35 kaizenly 阅读(1335) 评论(0) 推荐(0) 编辑
摘要: 【1】QTableWidget简介 QTableWidget是QT对话框设计中常用的显示数据表格的控件。 学习QTableWidget就要首先看看QTableView控件(控件也是有”家世“的!就像研究人一样一样的),因为QTableWidget继承于类QTableView。 两者主要区别是QTab 阅读全文
posted @ 2013-01-07 17:24 kaizenly 阅读(42883) 评论(0) 推荐(1) 编辑
摘要: 【1】冒泡排序理论 (1)基本概念 由于在排序过程中一般是小数往前放,大数往后放,相当于气泡往上升过程,所以称作冒泡排序。 如下图(鱼冒泡): 冒泡排序的时间复杂度为O(n*n)。 冒泡排序具有稳定性(参见随笔《常用排序算法稳定性分析》)。 (2)逻辑分析 依次比较相邻的两个数,将小数换到前面,大数 阅读全文
posted @ 2013-01-07 11:09 kaizenly 阅读(8443) 评论(1) 推荐(1) 编辑
摘要: 【1】认识智能指针 什么是智能指针?根据C++面向对象编程的思想,智能指针是一种对象。 常规指针与智能指针的区别如下: 对比发现常规指针pd的问题在于,不是有析构函数的类对象。 如果它是个对象,则可以在对象过期时,它的析构函数删除掉指向的内存。而这正是智能指针背后的思想。 好吧!那么,既然是对象,肯 阅读全文
posted @ 2013-01-06 18:49 kaizenly 阅读(914) 评论(0) 推荐(0) 编辑
摘要: 当你有一个对象的指针,而对象实际是该指针类型的派生类(例如:一个 Vehicle*指针实际指向一个Car 对象)。由此有两种类型:指针的(静态)类型(在此是Verhicle),和指向的对象的(动态)类型(在此是Car)。(1)静态类型 意味着成员函数调用的合法性被尽可能早地检查:编译器在编译时,编译器用指针的静态类型决定成员函数调用是否合法。如果指针类型能够处理成员函数,那么指针 所指对象当然能很好的处理它。例如,如果 Vehicle 有某个成员函数,则由于Car是一种Vehicle,那么Car 当然也有该成员函数。(2)动态绑定意味着成员函数调用的代码地址在最终时刻才被决定:基于运行时的.. 阅读全文
posted @ 2013-01-06 15:26 kaizenly 阅读(606) 评论(0) 推荐(0) 编辑
摘要: 如何禁止产生类对象呢?只要将类的构造函数用private修饰即可。那么,如何限制类只能产生一个类对象呢?只要借助于友元函数的static对象即可。示例代码如下: 1 class Printer 2 { 3 private: 4 Printer() 5 { 6 cout<<"thePrinter constructed"<<endl; 7 } 8 public: 9 void what() 10 { 11 cout<<"It's a printer"<<endl; 12 } 1... 阅读全文
posted @ 2013-01-06 15:06 kaizenly 阅读(474) 评论(0) 推荐(0) 编辑
摘要: 6.4:理解临时对象<1>为了使函数成功调用而进行隐式类型转换和函数返回对象时<2>当传送给函数的对象类型与参数类型不匹配时会产生的一种情况<3>当通过传值方式传递对象或者传递常量引用参数时,才会发生类型转换示例代码如下: 1 #include<iostream> 2 using namespace std; 3 class Test 4 { 5 int a; 6 public: 7 Test(int data = 10):a(data) 8 { 9 cout<<"Construction :"<<th 阅读全文
posted @ 2013-01-06 14:42 kaizenly 阅读(339) 评论(0) 推荐(0) 编辑
摘要: 只允许对象生成于堆内?怎么理解?肿么办? 我们已经知道,假如手头上有一个类Person,当你在程序中写下Person objTemp;时, 编译器悄悄地做了两件事:调用constructor构造对象objTemp,而在弹栈时,调用析构函数destructor析构掉对象objTemp。 对象rn的构造 阅读全文
posted @ 2013-01-06 12:16 kaizenly 阅读(377) 评论(0) 推荐(0) 编辑
摘要: 示例代码如下: 以上四种交换方法,各有利弊。 Good Good Study, Day Day Up. 顺序 选择 循环 坚持 阅读全文
posted @ 2013-01-06 11:46 kaizenly 阅读(432) 评论(0) 推荐(0) 编辑
摘要: 在了解代码之前,请先仔细阅读这些概念:<1>虚构造函数:一种允许你做一些 C++不直接支持的事情的用法。你可能通过虚函数 virtual clone()(对于默认拷贝构造函数)或虚函数 virtual create()(对于默认构造函数),得到虚构造函数产生的效果。<2>虚拟拷贝构造函数:一种特殊的虚拟构造函数――虚拟拷贝构造函数――也有着广泛的用途。虚拟拷贝构造函数能返回一个指针,指向调用该函数的对象的新拷贝。因为这种行为特性,虚拟拷贝构造函数的名字一般都是copySelf,cloneSelf或者是像下面这样就叫做clone。<3>协变返回类型:注意:下述 阅读全文
posted @ 2013-01-06 11:06 kaizenly 阅读(1344) 评论(0) 推荐(0) 编辑
摘要: 4.1:谨慎定义类型转换函数<1>容易的方法是利用一个最新的编译器特性:explicit关键字<2>C++编译器把">>"作为一个符号来解释,在两个">"间没有空格,语句会产生语法错误。<3>隐式类型转换函数示例代码如下: 1 #include<iostream> 2 using namespace std; 3 4 template<class T> 5 class Array 6 { 7 public: 8 class ArraySize 9 {10 public:11 A 阅读全文
posted @ 2013-01-06 10:16 kaizenly 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 3.1:指针与引用的区别 <1> 指针用操作符“*”和“->”;引用使用操作符“.” <2> 任何时候都不能使用指向空值的引用。即就是一个引用必须总是要指向某个对象通俗一点, 就是说,如果你的设计不允许变量为空,这时就把变量声明为引用 <3> 不存在指向空值的引用这个事实意味着使用引用的代码效率比使 阅读全文
posted @ 2013-01-06 09:22 kaizenly 阅读(344) 评论(0) 推荐(0) 编辑
摘要: 诸位周知,Qt 使用的不是标准的C++ 语言,而是对其进行了一定程度的“扩充”。为什么这样说呢?这一点我们从Qt新增加的关键字就可以看出来:SIGNAL、SLOTS 或者 EMIT。所以有人会觉得Qt 的程序编译速度慢,这主要是因为在 Qt 将源代码交给标准 C++ 编译器之前,需要事先将这些扩展的语法去除掉。而完成这一操作的工具就是所谓的moc。moc 全称是 Meta-Object Compiler,也就是“元对象编译器”。Qt 程序在交由标准编译器编译之前,先要使用 moc 分析 C++ 源文件。如果它发现在一个头文件中包含了宏 Q_OBJECT,则会生成另外一个 C++ 源文件。这个源 阅读全文
posted @ 2013-01-05 23:15 kaizenly 阅读(2687) 评论(0) 推荐(1) 编辑
摘要: QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象、易于扩展、真正的组件编程等特点。 更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT 库的基础之上。 【1】历史 信号和槽机制是 QT 的核心机制,要精通QT编程就必须对信号和槽有所 阅读全文
posted @ 2013-01-05 23:04 kaizenly 阅读(5142) 评论(3) 推荐(1) 编辑
摘要: 【1】信号与槽注意点(1)信号和槽是Qt编程的一个重要部分。这个机制可以在对象之间彼此并不了解的情况下将它们的行为联系起来。槽和普通的c++成员函数很像。它们可以是虚函数(virtual),也可被重载(overload),可以是公有的(public),保护的(protective),也可是私有的(p... 阅读全文
posted @ 2013-01-05 20:30 kaizenly 阅读(766) 评论(0) 推荐(0) 编辑
摘要: 堆是堆,栈归栈在阅读以下内容之前,请了解一下几点:第一:坚决澄清:堆是堆,栈归栈。第二:曾经的“堆栈”再不允许重谈,简直就是扯淡!第三:下面内容均属于从内存分配角度的阐述,不要与数据结构混淆。【1】程序的内存分配(1)内存分配详解一个由C/C++编译的程序占用的内存分为以下几个部分<1>栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。<2>堆区(heap) — 一般由程序员设计分配及释放,若程序员不释放,程序结束时可能由OS回收。可能涉及的操作符如下:new、malloc、delete、free等等。<3>全局区(静态区)(st 阅读全文
posted @ 2013-01-04 21:31 kaizenly 阅读(522) 评论(0) 推荐(0) 编辑
摘要: 【1】设置或者清除某位。 示例代码如下: 【2】指针引用经典笔试题 (1) (2) (3) (4) (5) (6) 以上几个例子是面试时遇到的最频繁的试题,在此特意备份,以便学习。 【3】这道题是最典型的数组越界示例: 无限循环....... 【4】求最大字段和 示例代码如下: 【5】字节对齐 示例 阅读全文
posted @ 2013-01-04 20:26 kaizenly 阅读(1715) 评论(2) 推荐(0) 编辑
打赏