#include<stdio.h> int a[100]; int n; void quicksort( int left,int right ); int main() { int i,j; scanf( "%d",&n ); for( i = 0;i < n;i++ ) { scanf( "%d",&a[i] ); //输入数据 } quicksort( 0,n-1 ); //快排 for( i = 0;i < n;i++ ) { printf( "%d ",a[i] ); } printf( "\n" ); return 0; } void quicksort( int left,int right ) { int i,j,t,tmp; if( left > right ) { re 继续阅读 >>


吕子健 17/12/20 21:51:45
以前一直觉得这两个有区别,但也没深究,今天写了个代码报了警告于是就看了看,总结如下。 例如如下代码: #include<iostream> using namespace std; int main() { char *p1 = "abcd"; char p2[] = "1234"; return 0; } 这二者的区别还在于: 1. p1是一个指针变量,有一块内存存储它,它的内容是字符串的地址,那么我们要访问字符串就先要取出p1中存储的地址,然后计算偏移量,进行访问 2. 不同于p1,p2直接是字符串的地址,直接访问就行了 “abcd”是文字常量区分配了内存存储的,栈上分配一地址给p1并指向“abcd”,那么如果在后面的代码中改变了“abcd”,自然崩溃。所以,需要加上const限定 但是说到底,为什么改变p1就是危险的,字符数组的内容就能随意改变呢?这是因为“abcd”是在编译时刻就确定的,而“1234”是在运行时刻赋值的。所以,编译器在编译 继续阅读 >>


吕子健 17/12/05 11:16:06
总结一下最近学到的类继承的知识,包括三种继承方式、多态的实现、动态联编和静态联编。 欢迎各位指正其中的错误。 以后的理解更加深刻了回来更新和修改。 三种继承 从一个类,派生出另一个类时,原始类称为基类(父类),继承类称为派生类(子类) 派生类对象存储了基类的数据成员,且可以使用基类的方法,但不能直接访问基类的私有成员,必须使用基类的公有方法进行访问。可以根据需要添加额外的成员 因为构造函数不能继承,那么 派生类在创建对象时先使用基类的构造函数初始化继承的基类的数据成员,再使用自己的构造函数( 类的构造函数可以为空,但必须存在 ) 例如: #include<iostream> using namespace std; class A { int x; public: A( int xx ) { x = xx; } void show() { cout << " A 继续阅读 >>


吕子健 17/11/19 20:59:52
今天在敲一段代码时编译正确,运行时却出现bug 先是显示如题目的提示,然后会出现一大堆系统错误信息,如图 当时一脸懵逼,只能看懂一句:invalid pointer(无效的指针) 所以经过排查,发现有两句代码写的有问题,delete了不是new出来的指针,改掉就好了 以后要注意,delete/delete[]和new/new[]一定是配套使用 作者:weixin_36888577 发表于 2017/11/14 22:22:14 原文链接 https://blog.csdn.net/weixin_36888577/article/details/78535912 阅读:222 继续阅读 >>


吕子健 17/11/14 22:22:14
Linux下不支持fflush刷新缓冲区,所以我们想到了setbuf函数,这随之而来的各种问题和小伙伴探讨之后得出如下结论 首先,网上有很多不同的言论,有的说setbuf只是刷新缓冲区,有的说会关闭缓冲区,众说纷纭,经过我们的测试和查找资料,如果你将stdin/stdout指向NULL,setbuf会关闭你的缓冲区,而不仅仅是刷新(查询度娘和man手册)。 例如:setbuf(stdin,NULL); 因为stdin相当于一股输入流,你把它指向空,那么就不仅仅是刷新了,他会关闭你的输入缓冲区,而从你的输入流里读数据。而输入流是行缓冲,但也会保存你的每一个字符(例如你的回车和空格,就像你的输入缓冲区有时候在cin的错误输入下,也会保存回车,如果你的输入流不存回车,那么他从哪里拿的回车呢?关于这个问题,具体大家可以看我的上一篇博客这里写链接内容 ) 综上所述,setbuf会将缓冲区更改为你指定的内存,而当你将stdin,stdout指向NULL,他会关闭 输入/输出缓冲区,而更改为从输入/输出流里 继续阅读 >>


吕子健 17/11/12 23:13:59
看到书中的return *this比较疑惑,查询过后总结如下。 class temp { ...; } 假如定义temp *get(){return this;},那么返回的this就是地址,即返回一个指向对象的指针 假如定义temp get(){return *this;} 那么返回的就是对象的克隆,是一个临时变量 假如定义temp &get(){return *this;} 那么返回的就是对象本身 例如: #include<iostream> using namespace std; class A { public: int x; A get() { return *this; } }; int main() { A a; A b; a.x = 4; if( a.x == a.get().x ) { cout << "asasas 继续阅读 >>


吕子健 17/11/07 20:28:31
#include<iostream> using namespace std; struct huff { int weight; huff *left,*right; }; int *coding = new int[10]; class huffmantree { huff *Tree; public: huffmantree(); huff *get(); void init(); void show( huff *tree ); int weightlen( huff *tree,int len ); void huffcoding( huff *tree,int len ); }; huffmantree::huffmantree() { Tree = NULL; } huff *huffmantree::get() { return Tree; } //建立huffma 继续阅读 >>


吕子健 17/11/04 15:10:03
/******************************************************* >非递归遍历二叉树(先序、中序、后序遍历) *****************************************************/ #include<iostream> #include<stack> using namespace std; struct node{ //定义树节点 char ch; node *left,*right; }; node *creat(); void preorder( node *root ); void inorder( node* root ); void postorder( node *root ); int main() { node *root = creat(); cout << "先序遍历:"; preorder( roo 继续阅读 >>


吕子健 17/10/25 21:52:31
讨论这三者的区别我们要先认识函数模板,函数模板是C++新增的功能,他会创建一个通用的函数以支持多种不同类型的形参,避免函数体的重复设计,在我们需要重复用到某一段代码但是需要处理不同类型的参数时,使用函数模板是很方便的一个手段他最大的特点是把数据类型也作为了参数。每一个函数用一个函数模板,想让几个函数使用共同的模板参数,应当使用模板类 显示实例化: template void Swap<int> (int ,int); 显示具体化:( 定义job为一个结构体 ) template <> void Swap<job> (job &,job &); 或 template<> void Swap (job &,job &); 从定义形式上我们可以看出区别在于前者以 template 打头,后者以template<> 打头 从含义上,显示具体化告诉编译器不要使用Swa 继续阅读 >>


吕子健 17/10/23 22:36:49
C++将输入看作是流入程序的字符流,iostream文件定义cin为表示这种流的对象 对应的输入数据都会先存入输入缓冲区,cin从输入缓冲区中读入数据,所以当缓冲区中有残留数据时,cin直接取得残留数据而不会请求键盘输入 cin是以空格为分隔的,而读到回车后,结束输入,丢掉换行,即回车在正常情况下不进入缓冲区 那么,在非法输入后,我们会面对什么呢? #include<iostream> using namespace std; int main() { int a,b; cin >> a; //cout << " cin.fail == " << cin.fail() << endl; //cin.clear(); //cin.ignore(); cin >> b; cout << "a == " << a << " b == " 继续阅读 >>


吕子健 17/10/17 23:10:31