- 博客(96)
- 收藏
- 关注
原创 C++数据结构--循环链表的应用--解决约瑟夫问题
解决问题过程图解实现代码://n个竞争者,每隔m个竞争者就淘汰一个 //返回值为胜出的竞争者 int josephus(int n,int m){list lst;for(int i=1;i //给[1,n]个竞争者编号 {lst.push_back(i);} coutfor(int x:lst){cout
2013-07-31 10:25:24 1337
原创 C++数据结构与STL--双向循环链表(实现自定义iterator类)
双向循环链表核心代码图解:节点类#ifndef node_H#define node_Htemplateclass node{public:node *pre; //上一节点指针node *next;//下一节点指针T val;node():val(T()),pre
2013-07-31 01:39:10 3494
原创 C++数据结构--单向循环链表(实现头插法,尾插法)
单向循环链表核心代码图解:*插入到非空链表的表尾*删除非空链表元素实现代码:并未包括异常类处理templateclass sinCirLink{private:class node //节点类型 {public:node():val(T()),next(nullptr){}node(T v)
2013-07-30 16:29:58 4787
原创 C++语法基础--优先队列--priority_queue
*优先队列弹出数据是能够按照队列元素优先级的顺序进行,而不是按照他们进入队列的先后顺序 *元素进入优先队列时,没有任何限制*STL中的priority_queue(头文件#include)默认情况下假定最大的元素也具有最大的优先级 Example: int main(){ priority_queue pq; pq.push(5);
2013-07-29 16:27:53 626
原创 C++数据结构--队列的应用--基数排序
Example:对数组91,6,85,15,92,35,30,22,39进行基数排序对个位进行排序后,10个队列中记录如下图从所有队列中依次收集元素得到:30 91 92 22 85 15 35 6 39对十位进行排序后,10个队列中记录如下图从所有队列中依次收集元素得到:6 15 22 30 35 39 85 91 92
2013-07-29 15:31:32 2154
原创 C++数据结构--循环队列的实现
1.循环队列模型与数组视图的对照 2.实现代码: const int MAX=3; //循环队列的固定长度 templateclass myQue{private:T que[MAX];size_t front_index;//队首下标 size_t back_index; //队尾下标 size_t lengt
2013-07-29 13:50:04 1428
原创 C++数据结构与STL--栈的应用--中缀表达式转后缀表达式
1.输入优先等级和栈优先等级定义:目的,解决右结合表达式问题,例如2^2^2为右结合表达式2.累计等级与无效表达式分析: 3.使用栈处理相同或较低优先级的运算符 Example:a*b/c+d 4.处理右结合表达式运算符^ Example:a^b^c 5.处
2013-07-28 21:32:05 1191 1
原创 C++数据结构与STL--栈的应用--后缀表达式的计算
1.后缀表达式:运算符出现在其运算数之后 Example: 中缀:a+b*c 后缀:abc*+ 中缀:(a*b+c)/d+e 后缀:ab*c+d/e+ 2.后缀表达式计算 *从左到右扫描后缀表达式的每一项,用一个栈装载运算数,如果是运算数将其推入栈 *如果是二元运算符,则出
2013-07-28 17:52:27 1230
原创 C++数据结构与STL--栈的实现
template//适配器类class myStack{private:vector st;//向量对象public: myStack():st(0)//创建一个空栈 { } void push(T val) //入栈 { st.push_back(val); } void
2013-07-28 17:44:38 714
原创 C++数据结构--栈的应用--进制转换
1.栈具有后进先出的访问方式 栈顺序存储元素,但仅允许在序列的一端插入和删除数据项 Example:A B C D的进栈和出栈 2.栈的应用:进制转换 Example:把十进制431转换为16进制 实现代码: string convert(int num,int base){ string char_num("0123456789ABCDEF");
2013-07-27 16:24:32 1331
原创 C++数据结构与STL--有序表,删除表重复项
1.有序表 算法过程模拟:假设intList最初包含整数60,65,74,82 curr=intList.begin() 在表中插入50: 在表中插入70 实现代码 template//假设容器为listvoid insertOrder(list& lst,T val){ auto beg=lst.begin
2013-07-27 15:19:14 2846 1
原创 C++数据结构--插入排序
*在进行第i遍时,[0 ,i-1]范围内的元素已经排序完毕 *第i遍的任务时通过扫描以前已分类的子表,给vec[i]在[0,i]的子表范围内找到正确的位置 *插入排序并不需要额外的辅助空间,只是在原数组上进行排序例如,对字符串数组Monroe,Chin,Flores,Stein,Dare进行插入排序实现代码:templatevoid
2013-07-26 18:27:32 635
原创 C++数据结构--递归--最大公约数,斐波那契数
1.最大公约数公式: int gcd(int a,int b){if(b==0){return a;} gcd(b,a%b); }int main(){ cout//6 return 0;}2.斐波那契数 定义: *递归版本 int
2013-07-26 09:46:20 819
原创 C++数据结构与STL--递归--汉诺塔
实现代码://n代表盘子的数目,init代表盘子所在的初始化杆,//des代表盘子移向的目的杆,tem代表交换时的临时辅助杆void hanoi(int n,string init,string tem,string des){ if(n==1) { cout" return; } hanoi(n
2013-07-26 08:47:20 749
原创 C++数据结构与STL--递归--进制转换
Tips:用C++函数实现递归时,程序把函数参数和函数的返回地址推入运行栈,入栈和出栈操作指导函数的执行// 该算法适用于base的范围[2,10] void displayInBase(int n,int base){ if(n==0) { return ; } displayInBase(n/base,base);
2013-07-26 08:07:02 1031
原创 C++数据结构与STL--二分查找
给出数组int arr[]={-7,3,5,8,12,16,23,33,55};*查找target=23#includeusing namespace std;template//查找成功则返回元素下标,否则返回-1 //数组查找下标范围[begin,last) //此二分查找算法要求数组中的元素已经按从小到大排序 int binarySearc
2013-07-25 21:45:50 936
原创 C++数据结构与STL--选择排序
注:本系列笔记来源于:C++数据结构与应用标准模板库(虽是10年前出版的,个人认为还可以,于是整理数据结构的知识时选了它)1.使用选择排序排序整数数组50,20,40,75,35 *外部循环对表进行n-1次遍历。pass控制变量的范围0-n-2 *对于每次重复过程,都有一个内部循环扫描arr[pass]到arr[n-1]的无序子表,并判定最小元素的下标。 *只有最小元素的下标
2013-07-25 21:23:06 711
原创 C++11特性--Lambda函数
1.Lambda函数 *对于接受函数指针或函数符的函数,可以用匿名定义(lambda)作为其参数。 *仅当Lambda表达式完全由一条返回语句组成时,自动类型推断才管用,否则需要使用新增的返回类型后置语法 *当没有返回值时,推断为void Example: [](int x){ return x%2==1;} 解析: []代替了函数名,这里
2013-07-25 07:11:30 653
原创 C++11特性--新的类功能--特殊的成员函数(移动构造函数,移动赋值运算符),默认方法和禁用方法(default,delete),委托构造函数,管理虚方法(override,final)
1.新的类功能 (1)特殊的成员函数 *在原有4个特殊成员函数(默认构造函数,复制构造函数,复制赋值运算符和析构函数)的基础上,C++11新增了两个:移动构造函数,移动赋值运算符。这些成员函数式编译器在各种情况下自动提供的。 *如果类定义了移动构造函数或移动赋值运算符,编译器将不会自动提供复制构造函数和复制赋值运算符 *如果类定义了造函数,复制
2013-07-25 07:06:03 2444
原创 C++11特性--右值引用,移动语义,强制移动move()
1.右值引用 *右值:不能对其应用地址运算符的值。 *将右值关联到右值引用导致该右值被存储到特定的位置,且可以获取该位置的地址 *右值包括字面常量(C风格字符串除外,它表示地址),诸如X+Y等表达式以及返回值得函数(条件是该函数返回的不是引用) *引入右值引用的主要目的之一是实行移动语义 Example: int f(int x,int y){return
2013-07-24 18:31:27 1533
原创 C++11特性--基于范围的for循环,新的STL容器,新的STL方法( cbegin(),cend(),crbegin(),crend())
1.模板和STL方面的修改(1)基于范围的for循环 *对于内置数组以及包含方法begein()和end()的类合和STL容器,基于范围的for循环可简化为它们编写循环的工作 *如果要在循环中修改数组或容器的每个元素,可使用引用类型 Example: int main(){int arr[]{1,2,3};for(auto x:arr){cout
2013-07-24 18:24:17 2611
原创 C++11特性--作用域内枚举,显式转换符,类内成员初始化
1.作用域内枚举 C++11新增了一种枚举。这种枚举使用class或struct定义: *新枚举要求进行显式限定,以免发生名称冲突 *作用域枚举不能隐式地转换为整型 Example: enum class animal{ sun,cat,dog}; int main(){ animal mycat=animal::cat;
2013-07-24 00:21:58 1103
原创 C++11特性--auto,decltype,返回类型后置,using=,nullptr
1.auto *C++11将其用于实现自动类型推断(这要求显式初始化,让编译器将变量类型设置为初始值的类型) void fun(int x){cout} int main() { auto x=1; auto px=&x; auto pf=fun; //等效于void (*pf)(int);pf=fun;
2013-07-23 18:05:55 1155
原创 C++语法基础--模板实参推断,模板类型形参的实参的受限转换,模板实参推断与函数指针
1.编写泛型程序 *模板代码总是要对将要使用的类型做一些假设,所以实例化的版本可能是非法的 Example: template//返回两个数的较大者T bigger(T v1,T v2){return v1>v2?v1:v2; //这里的模板假设元素具有比较性 } class A{} ;int main(){ A
2013-07-23 12:43:56 952
原创 C++语法基础--模板与泛型编程--函数模板,类模板,模板形参,非模板形参
1. 定义函数模板 *函数模板是一个独立于类型的函数,可作为一种方式,产生函数的特定类型版本 *使用函数模板时,编译器会推断哪个模板实参绑定到模板形参。 *一旦编译器确定了实际的模板实参,就称它实例化了函数模板的一个实例 Example: //比较两个数的大小,v1>v2是返回正数,v1 template T compare(const T
2013-07-23 09:27:43 1257
原创 C++语法基础--句柄类
句柄类解决C++面向对象编程中不能使用对象支持面向对象编程(必须使用指针或引用才能获得动态绑定行为)的问题。准备知识1:可以简单地认为编译器首先扫描类定义(而不是类实现),知道这个类有什么函数、函数的原型是什么、有什么成员变量,成员变量的类型是什么。然后,编译器才会编译其实现,因此类成员函数总能直接访问任何成员变量和函数 Example: class A{publi
2013-07-22 18:24:31 1043
原创 C++11特性--统一的初始化,std::initializer_list
注:本系列笔记所有内容的参考资料来源于《C++ Primer Plus》 C++11特性需编译器支持,如果是WindowS集成开发环境,一般需要在IDE的编译器选项里找或者工程的属性里可以配置"-std=c++11" 以devC++为例:project==>project options==>Parameters==>
2013-07-22 11:12:28 4742
原创 C++语法基础--智能指针
1.智能指针准备知识:new关键字定义的指针,如果不用delete关键字删除,即使指针超出作用域范围,该指针也不会被删除Example:先给出一个在析构函数没有删除指针的类 class A { public: A(int *pt):p(pt) { } private: int *p; }; int main(
2013-07-22 09:41:32 768
原创 C++语法基础--派生类的构造函数,赋值操作符,析构函数,虚析构函数
1.如果派生类定义了自己的构造函数(复制构造函数)或赋值操作符,该构造函数(复制构造函数)或赋值操作符一般应显式使用基类构造函数(复制构造函数)或赋值操作符初始化基类部分、 Eample: class base { public: base() { } base(int i):x(i) { co
2013-07-21 16:38:18 795
原创 C++语法基础--恢复继承成员的访问级别,默认继承保护级别,友元关系与继承,继承与静态成员
1.恢复继承成员的访问级别(using 声明) *派生类可以恢复继承成员的访问级别,但是不能使访问级别比基类中原来指定的更严格或更宽松 Example: class base { public: int x; }; class private_derived:private base { pub
2013-07-20 19:43:55 799
原创 C++语法基础--public,protected,private的继承方式及其访问性
*派生类所继承的成员的访问由基类中的成员访问级别和派生列表中使用的访问标号共同控制 *派生类可以进一步限制,但不能放松对所继承的成员的访问 *基类本身指定对自身成员的最小访问控制1.基类成员为private *只有基类和基类的友元可以访问该成员,派生类不能直接访问基类的private成员2.基类成员为public或protected
2013-07-20 18:05:59 849
原创 C++语法基础--动态绑定,派生类,虚函数,覆盖虚函数机制
1.动态绑定: 通过基类的引用(或指针)调用虚函数时,发生动态绑定。 *继承层次的根类一般都要定义虚析构函数 *除构造函数外,任意非static成员函数都可以使虚函数 *保留字virtual只在类内部的成员函数声明中出现,不能用在类定义体外部出现的函数定义上 Example: class A { public: virt
2013-07-20 14:26:55 734
原创 C++语法基础--函数对象,函数对象的函数适配器(绑定器,求反器)
1.定义了调用操作符的类,其对象称为函数对象,即它们是行为类似函数的对象 Example: class abs{ public: int operator()(int i) { return i>=0?i:-i; } };int main(){ abs ob;
2013-07-20 07:57:28 895
原创 C++语法基础--转换操作符,重载确定
1.转换操作符 *将类类型值转变为其他类型值的转换。 *转换操作符在类定义体内声明,在保留字operator之后跟着转换的目标类型, operator type(); *转换函数必须是成员函数,不能指定返回类型(但必须显示返回一个指定类型的值),并且形参表必须为空 *只要存在转换,编译器将在可以使用内置转换的地方自动调用它。 Example: class My
2013-07-19 23:13:22 645
原创 QT入门笔记--信号和槽(附简单的C++类实现代码)
*对于所有定义了信号和槽的类,在类定义开始处的Q_OBJECT宏都是必须的 *signals,slots关键字实际上是宏 *一个信号的签名必须与它的接收槽的签名相匹配(即槽其参数个数,类型,顺序必须要和对应的信号保持一致。) *当一个信号被发射,会自动调用它所连接槽 *一个信号可以连接多个槽 *多个信号可以连接同一个槽
2013-07-18 23:52:10 1171
原创 QT入门笔记--窗口部件的布局
#include #include#include#includeint main(int argc, char *argv[]){ QApplication myapp(argc, argv); QWidget *w=new QWidget; w->setWindowTitle("H_Layout"); QSpinBox *sp
2013-07-18 16:37:44 1463 1
原创 QT入门笔记--建立连接--connect()
#include #includeint main(int argc, char *argv[]){ QApplication myapp(argc, argv); QPushButton *btn = new QPushButton("Quit"); QObject::connect(btn,SIGNAL(clicked()),&myapp,SLOT
2013-07-18 15:11:36 1174
原创 QT入门笔记--Hello,World
学C++已经有几个月了,总是研究入门书籍也不太好,于是想学点面向对象的东西,有人推荐研究MFC,但又不想把自己绑定到“有点软”(微软)平台上,于是就选了QT。总是在CSDN上发表文章,自己都有点不好意思了(害怕误导别人)。原意只是保存个人笔记的(本人手提经常重装,有时重装时忘记备份,辛辛苦苦的笔记就没了)。声明:此系列笔记(应该说所有文章),只涉及对自己有用,且自己看的懂的东西,并非入门教材或
2013-07-18 13:13:36 650
原创 C++语法基础--复制控制--复制构造函数 ,赋值操作符 ,析构函数
复制控制(编译器自动实现这些操作) *复制构造函数 *赋值操作符 *析构函数 1.复制构造函数 *当定义一个新对象并用同一个类型的对象对它进行初始化式,将显式使用复制构造函数 *当将该类型的对象传递给函数或从函数返回该类型的对象是,将隐式使用复制构造函数 C
2013-07-16 15:55:00 598
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人