自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 个人sublime txt 3配置

Preferences –>setting不保存过去打开的文件{ "font_size": 11, "hot_exit": false, "ignored_packages": [ "Vintage" ], "remember_open_files": false}Preferences –>Browse Packages –> U

2017-12-02 22:28:43 427

原创 adlist.h

FILE : Redis/src/adlist.h && Redis/src/adlist.cpp/* adlist.h 一个通用的双链表实现*/#ifndef __ADLIST_H__#define __ADLIST_H__/* 实现这个链表只用三种数据结构: struct listNode, struct listIter, struct list */typedef struct listN

2017-09-27 16:06:14 434

原创 C和Cpp两大重点

C:指针 重点是间接赋值成立的三个条件 1.有实参 和 形参 2.形参和实参关联,即实参给形参赋值 3.在子函数里 *p=values;Cpp : 函数指针 重点是多台成立的三个条件 1.有继承 2.有虚函数重写 3.父类指针或者引用指向子类对象C语言里,间接赋值效率很高,

2017-08-09 10:58:30 313

原创 const

const 修饰的全局变量放在只读区 这里理解为真常量 只读区位于全局变量区还是常量区有待思考#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;#include<string>//1. const修饰的全局变量const int a = 10;//const全局变量一般情况下是不分配内存的。如果不

2017-08-09 10:57:35 196

原创 改进的快速排序

/*在北京工作的时候,接触到改进快速排序的需求.在网上四处搜寻没有找到太合适的代码,可能是自己搜索的能力有待提升T_T偶然间在新浪博客看到一篇改进快速排序的思路,苦于没有源码,所以自己按照作者的思路实现了一遍.由于时间过去太久,找不到作者的博客链接了,T_T*///源码如下,仅供参考.#include <stdio.h>#include <string.h>#include <stdl

2017-08-09 10:47:13 256

原创 文件输出时,string和字符数组的区别.以及二进制模式和文本模式

1. 文件输出时,string和字符数组的区别 string写入文件的是指针,真正的数据在堆空间。 如果读取的时候,该堆空间已经被释放,则数据会丢失。2.二进制模式和文本模式 就是转换的问题 Linux下区别不大,明文不明文的问题。Windows下,换行是’\n\r’ 文本模式:如果数据里有’\n’写到文件里要换成’\n\r’,如果文件里有’\n\r’要转换为’\n’去读。 二进制模

2017-08-09 10:41:31 362

原创 class内的函数

class 里的函数并没有分配内存到class对象内部 (有的是inline)class 里的数据和函数分开,是为了创建多个对象的时候,函数只用一份就行。类似于动态dll!!!!!!!!!!sizeof的时候 只算每个类独有的空间 里面的函数还是全局函数,只是其他地方没有接口去调用而已每次调用的时候,可能是编译器做的优化, 比如class A{private; int num;pu

2017-08-08 15:36:11 974

原创 cout输出顺序

class CPerson { public: int setA(int pA) { this->m_nA = pA; } int setB(int pB) { this->m_nB = pB; } int getA_B() { return this->m_nA

2017-08-08 15:34:38 269

原创 类中声明的函数和类的成员函数

#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;class A{public: void f(); void f1();private: int m_nA;};void A::f1(){ cout << 1 << endl;}void f(){ cout

2017-08-08 15:33:06 576

原创 dynamic_cast的一些疑问

#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; class CAnimal { public: virtual void Func() {} }; class CCat :public CAnimal { public: vi

2017-08-08 15:30:11 314

原创 类模板为什么不能自动推导数据类型

函数模板可以根据实参的类型推导。逻辑上无参的函数应该不需要模板类。类模板类型的自动推导,是因函数模板要编译两次,每次都会利用函数的重载生成新的函数。这些不同的函数就是根据函数的形参类型,形参个数,形参顺序确定的。所以根据实参可以推导出形参的类型,从来自动推导出函数模板的类型。类模板是抽象数据类型,类没有参数之说(构造函数的参数不是用于确定类的特性的参数),因此类是没有任何信息可以推导出应该定义什么类

2017-08-08 15:28:26 1215 1

原创 类模板为什么不分文件

C++里的编译方式是独立编译,也就是一个CPP文件为一个独立的进行编译。类模板需要二次编译,定义的时候编译一次,实例化的时候编译一次。类模板分为 .h .cpp文件的时候,在.cpp的文件里并没有实例化。而在测试cpp里实例化的时候编译器找不到具体的函数实现。要么引入实现的.cpp文件,要么把类的声明和定义放到一个文件里,后缀是.hpp .hpp 只是一个习惯的后缀

2017-08-08 15:27:59 382

原创 全局变量重复定义

#include<stdio.h>int a;int a = 1;int main(){ printf("%d\n",a); return 0;}C里可以编译过 C++不能通过编译C语言可以重复定义多个全局变量,但是这些相同的全局变量都被链接到同一个全局区的地址上

2017-08-08 15:27:36 582

原创 一些疑问和思考

1。析构函数 执行顺序为什么和 构造函数的调用顺序相反 : 因为栈的顺序后进先出2。类内为什么一般不返回类的引用 : 如果返回类的引用就是返回本身,用户可能会修改。我们应该返回类,相当于复制一份。3。如果函数声明和函数定义分开写,函数声明和函数定义不能同时设置默认参数 :重定义默认参数 如果声明和定义都可以设置,那么设置值就可能不同。4。const修饰的类成员函数在份文件编写的时候,声

2017-08-08 15:26:47 215

原创 引用

C++int a=10;int &b=a; //int * const b=&a;b=20;//遇到b发现是引用类型的 自动 *b=20;特别是当函数调用引用的时候void test(int &c);test(b); //这里传递的是 int const *c=&b; //传递的是b的地址 所以可以修改b的值struct Person{ double a=10; do

2017-08-08 15:24:21 184

转载 vs2015 dll初步学习

动态链接库生成 .dll .lib 拷给使用动态库程序 .h .dll .lib .lib文件 编译的时候使用的 他确定了动态库的哪些函数是外部函数,哪些不是。外部函数才可以调用 .dll文件 运行的时候才链接,调用动态库 动态可以然后再返回结果给程序 程序继续执行 .h文件 是声明文件,告诉用户我有哪些接口

2017-08-08 15:22:20 215

原创 i++ ++i

i++ 要保存副本返回 ++i 不需要保存副本某些编译器对i++做了优化,这样效率一样 基本类型的数据一样 迭代器等++i的效率高总体 ++i和i++都行的时候尽量用++i

2017-08-07 11:52:29 187

转载 return 和 exit 的区别

return 是封装了exit如果使用exit直接是结束程序但是在函数中使用return 是返回到调用这个函数的地方去

2017-08-07 11:51:50 218

原创 free

int *p=(int *)malloc(sizeof(int)*10); free(p); //这里free后,“释放” 这里这块内存仍然被这个程序占用 程序执行结束后,由操作系统释放 p=NULL;这里虽然被释放的内存仍然被程序占用,但是如果有其他需要申请内存的,可以直接用。所以free很有意义

2017-08-07 11:51:21 246

原创 函数形参实参个数不统一

验证 函数指针参数和函数定义的参数个数不符合的情况下传递哪一个#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h>void logic(int(*rule)(int, int)){ int a = 100; int b = 200; int c = 3

2017-08-07 11:47:35 794

原创 struct一些学习经验

C中我觉得结构体的本质就是一个数据的打包,从而更好的组织和操作数据。C语言中再定义一个结构体的时候需要明确结构体的大小。struct Person{ struct Person *person;};这种是可以定义的,因为指针占的字节大小确定struct Person{ struct Person person;};这种是不可以定义的struct Person{};这

2017-08-07 11:45:34 251

原创 函数指针的优化

vs2015里void func(){ printf("hello world\n");}// 1typedef void(*FUNC_TYPE)();FUNC_TYPE p = &func; (*p)();//2typedef void(*FUNC_TYPE)();FUNC_TYPE p = func;(*p)();// 3typedef void(*FUNC_TYPE)

2017-08-07 11:40:21 321

原创 VS下scanf&gets的本质区别

VS2015里scanf()每次读取的时候 先判断缓冲区是否为’\n\r’或者是一个或多个空格 如果是就跳过从下一个开始取 并且碰到空格或者是’\n\r’作为一个的结束标志 读取结束将一个缓冲区的 ‘\n\r’和空格 留在缓冲区gets()每次读取不会把’\n\r’或者空格留在缓冲区 并且只以’\n\r’作为结束标志char *a=(char *)malloc(sizeof(char)*10)

2017-08-07 11:24:53 455 2

原创 vs下的字节对齐的一些疑问

double p= 0;double a = (int)(&p);int *aa = (int *)&p;double b = (int)(aa);printf("%d %lf %lf\n", aa,b,b/8);这里输出 b/8 有时候会输出非整数(.5) 这里理解为地址都是逻辑地址 如果逻辑地址起始地实际地址也是个 b/8非整数(.5) 那就对了,double要放在起始地址,这

2017-08-07 11:14:27 892

原创 宏函数

普通函数调用的时候要进行压栈,就是形参传递的时候宏定义函数形参传递是直接对应替换宏定义函数的效率高fgetc() 普通函数 f是function的意思getc() 宏定义函数宏函数也就是用空间换时间有时候宏函数需要考虑很多问题 比如 #define ADD(a,b) a+b ADD(10,20)没问题 ADD(10,20)*10 得到的结果是210 定义成 #define

2017-08-07 11:07:37 196

原创 NULL

*- #define NULL ((void )0) - void * 类型在linux的编译器下,步长是1。 - vs里,默认没有步长。**

2017-08-07 11:03:59 176

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除