自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 define中#和##以及__VA_ARGS_

经常看到别人写的代码中define有特殊操作符#和##。接下来就让我们看看他们代表的具体意思:(1)#假如希望在字符串中包含宏参数,ANSI C允许这样作,在类函数宏的替换部分,#符号用作一个预处理运算符,它可以把语言符号转化程字符串。例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为字符串化。例如:#incldue <stdio.h>#define PSQR(x) printf("the square of" #x "is %d.\n",(x)*(x))

2021-02-25 15:53:01 361

原创 C++ typename的起源与用法

起因近日,看到这样一行代码:typedef typename __type_traits<T>::has_trivial_destructor trivial_destructor;虽说已经有多年C++经验,但上面这短短一行代码却看得我头皮发麻。看起来它应该是定义一个类型别名,但是typedef不应该是像这样使用么,typedef+原类型名+新类型名:typedef char* PCHAR;可为何此处多了一个typename?另外__type_traits又是什...

2021-02-23 14:13:09 206

原创 0x5f375a86魔法数字

0x5f375a86属于一个魔法数字。它来自一个传奇算法(平方根倒数速算法),此算法最早被认为是由约翰·卡马克所发明,发明时这个值为0x5f3759df,后来由Lomont通过暴力穷举找到这个更优值,但后来的调查显示,该算法在这之前就于计算机图形学的硬件与软件领域有所应用,如SGI和3dfx就曾在产品中应用此算法。由来此算法最早由Gary Tarolli在SGI Indigo的开发中使用。虽说随后的相关研究也提出了一些可能的来源,但至今为止仍未能确切知晓此常数的起源。这个引擎的源代码里包括一个反

2021-02-05 17:59:07 5627

原创 杂项:代码编写小技巧一

1.有一个函数Func()内有使用到vector,且会进行push_back。当这个函数会频繁调用到,比如每帧会刷新,这时候我如果我们能过明确的知道这个容器的大小,哪怕这个容器的大小需要计算,我们可以先计算出这个容器的大小,然后定义容器时先使用reserve初始化capacity大小,优化vector扩容时的损耗。2.有一个数double a, 一个bool flag;当flag为true是a不变, 当flag为false时, a为0,这时候可以写成a *= flag,而不是 a = flag ? a

2020-12-25 14:56:47 113

原创 dynamic_cast介绍

首先说到c++常用的四中转换类型,我们都很清楚,分别是下面四中 1 const_cast const_cast<目标类型>(标识符):目标类型只能是指针或者引用2 static_cast 类似C风格的强制转换,进行无条件转换,静态类型转换: 1)基类和子类之间的转换:其中子类指针转换为父类指针是安全的,但父类指针转换为子类指针是不安全的(基类和子类之间的动态类型转换建议用dynamic_cast)。 2)基本数据类型转换,enum,struct,int,cha...

2020-11-11 16:22:30 4257

原创 mysql 四种隔离级别

事务的 四个特征(ACID)事务具有四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。1 、原子性。事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做2 、一致性。事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就

2020-06-02 19:44:46 185

转载 windows下安装VIM

全世界最好的编辑器VIM之Windows配置(gvim),vundle插件管理,NERDTree插件,ctrlp插件,vim-nerdtree-tabs插件等 。vim本来就是很强大,很方便的编辑器,再加上这些杀手级的插件,那就真的无敌了官方网站:http://www.vim.org平时习惯在linux上面使用vim,但是在windows下面,总感觉没有找到比vim好用的编辑器,所以,决定...

2019-11-10 17:05:27 1537

原创 vs编译与停止调试时卡顿、无响应的问题

这是由于VS运行太久参数大量的缓存导致。1.单击“开始”,选择“运行...”,或者win+r快捷键2.键入“devenv.exe/resetuserdata”。此命令会运行几分钟时间,VisualStudio清除设置并将其自身重置到其最初的状态。...

2019-11-04 20:24:44 6468

原创 C++ 类的前向声明、不完全类型类

简介在一个给定的源文件中,一个类只能被定义一次,如果在多个文件中定义一个类,那么每个文件中的定义必须是完全相同的将类定义放在头文件中,可以保证在每个使用类的文件中以同样的方式定义类。使用头文件保护符,来保证即使头文件在同一个文件中被包含多次,类定义也只出现一次。只声明却没有定义的类称为—————–不完全类型,不完全类型不能定义该类型的对象,只能用于定义指向该类型的指针及引用,或者用于声明...

2019-07-23 14:31:34 914

原创 C语言链接过程会遇到的问题以及解决方法

连接过程中常见的错误是符号未找到(undefined reference)和符号重定义(redefinition)。由于在编译器在处理各个符号的时候,已经没有了各个C语言源文件的概念,只有目标文件。因此对于这种错误,连接器在报错的时候,只会给出错误的符号的名称,而不会像编译器报错一样给出错误程序的行号。 符号未定义的错误经常发生在符号已经声明,但是并没有具体的定义的情况下。在C语...

2019-04-12 14:06:19 4105

原创 C语言的编译过程

很多人做了很久的C/C++,也用了很多IDE,但是对于可执行程序的底层生成一片茫然。可以想象到大公司面试正好被问到这样的问题,有多悲催不言而喻,这里正由于换工作的缘故,所以打算系统的把之前用到的C/C++补一补。这里权且当做抛砖引玉,大神飘过。【总述】从一个源文件(.c)到可执行程序到底经历了哪几步,我想大多数的人都知道,到时到底每一步都做了什么,我估计也没多少人能够说得清...

2019-04-12 13:42:16 137

原创 vector容器的内存回收

在vector中添加500个元素: vector <int> vecInt; for (int i=0;i<500;i++) { vecInt.push_back(i); } int j= vecInt.capacity(); //j=512 i = vecInt.size(); //i=50...

2019-04-08 13:32:25 919

原创 C++ 拷贝构造函数和赋值构造函数

在C++中复制控制是一个比较重要的话题,主要包括复制构造函数、重载赋值操作符、析构函数这三部分,这三个函数是一致的,如果类需要析构函数,则它也需要复制操作符 和 复制构造函数,这个规则被称为 C++的“三法则”。如果需要手动定义了其中了一个,那么另外的两个也需要定义,通常在存在指针或者前期相关操作的情况下,都需要手动的定义。 复制构造函数与重载赋值操作符实现的大题相...

2019-04-06 16:43:35 14879 6

原创 在单项链表中用O(1)的时间删除指定节点

题目的前提是被删除的节点存在链表中。(如果要判断有没有在链表中,又得遍历,那时间肯定不会是O(1))提到删链表节点p,首先想到是遍历整个链表,找到删除节点的前驱q,然后改变节点指向被删除的节点的下一个(q->next = p->next),删除节点(delete p),但是,这样删除单链表的某一节点,时间复杂度就是O(n),不符合要求;时间复杂度是O(n)的做法就不说了,...

2019-03-20 21:00:15 211

原创 使用STL库时需要注意的事项——迭代器失效

当使用一个容器的insert或者erase函数通过迭代器插入或删除元素"可能"会导致迭代器失效,因此我们为了避免危险,应该获取insert或者erase返回的迭代器,以便用重新获取的新的有效的迭代器进行正确的操作iter=vec.insert(iter);iter=vec.erase(iter);迭代器失效的类型:1.由于插入元素,使得容器元素整体“迁移”导致存放原容器元素的...

2019-03-20 20:28:26 205

原创 静态库和动态库

函数是可在整个程序中重用的代码块。使用它们可以节省时间,无需多次重写代码。与函数一样,库也可以节省时间,因为它们使函数可以在多个程序中重用。 静态库或静态链接库是一组例程,外部函数和变量,它们在编译时在调用者中解析,并由编译器,链接器或绑定器复制到目标应用程序中,从而生成目标文件和一个独立的可执行文件。动态链接只包括库的地址(而静态链接是浪费空间)动态链接在运行时链...

2019-03-20 11:04:22 2246

原创 C++中重载、覆盖(重写)和隐藏的区别

基本概念:重载:是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型。1 class A{2 public:3 void test(int i);4 void test(double i);//overload5 void test(int i, double j);//ove...

2019-03-14 10:22:27 88

原创 C语言获取文件的大小

一、获取文件系统属性,读取文件大小。在C语言库函数中有stat函数,可以获取文件的基本信息,其中就有文件大小。 1 2 3 4 5 6 7 8 9 #include&lt;sys/stat.h&gt;//包含头文件。 intfile_size(char*filename)//获取文件...

2019-03-11 14:37:37 11228

原创 C++各类型的sizeof

以下是在64位系统中C++各类型的sizeof大小的测试#include&lt;iostream&gt;#include&lt;string&gt;using namespace std;int main(){ char c,*pc; bool b,*pb; int i,*pi; float f,*pf; double d,*pd; s...

2019-03-07 23:40:16 395

原创 C++类的静态数据成员

class Box{ public: int colume(); privare: static int height; int width; int length;}1.如果希望各对象中的数据成员值是一样的,就可以把它定义为静态数据成员,这样他就为各...

2019-03-06 11:25:14 294

原创 malloc、free、new、delete的比较

malloc与free都是c语言中的函数,malloc的返回值为void *型,在使用的时候要注意对其进行类型转换, eg:char* p=(char*)malloc(number*sizeof(char));malloc在分配内存的时候是以字节来分配的。在分配之前也会记录数组的大小和类型。最后返回一个指向数据区的void型指针。mall...

2019-03-05 20:05:17 206

原创 C/C++指向函数的指针

类型名(*指针变量名 )(函数参数表列)如 int(* p)(int ,int )* p两侧的括号不可省略,表示p先与*结合,是指针变量,然后再与后面的()结合,()表示是函数,即该指针变量不是指向一般的变量,而是指向函数。如果写成int * p(int , int);由于()优先级高于*,它相当于int *(p(int , int )),就成为声明一个p函数了(这个函数的返回值是指向...

2019-03-05 16:53:16 90

原创 C++类成员初始化顺序

1、成员变量在使用初始化列表初始化时,与构造函数中初始化成员列表的顺序无关,只与定义成员变量的顺序有关。因为成员变量的初始化次序是根据变量在内存中次序有关,而内存中的排列顺序早在编译期就根据变量的定义次序决定了。这点在EffectiveC++中有详细介绍。2、如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关。什么意思呢,举个栗子1.在初始化...

2019-03-05 15:40:09 504

原创 二叉树的公式

变量的意义:n为总节点数,n0度为0的节点也就是叶子结点,n1度为1的结点,n2度为2的结点。1.对于任何二叉树:n0 = n2+12.对于完全二叉树:当n为奇数时:n0 = (n+1)/2,n1 = 0,n2 = (n-1)/2当n为偶数时:n0 = n/2 ,n1 = 1 ,n2 = (n-2)/2...

2019-03-04 15:50:48 449

原创 完全二叉树叶子节点、度为1节点、度为2节点的个数

设叶子节点个数为n0,度为1的节点个数为n1,度为2的节点个数为n2,必有 n0+n1+n2 = n(1) 对于二叉树有: n0 = n2+1(2) 由上面两式 ==&gt; n0 = (n+1-n1)/2 ,n2 = (n-1-n1)/2(3) 由完全二叉树的性质可知:n1 = 0 或 1n1=0,n为奇数时:n0 = (n+1) / 2 n1=1,n为偶数时:n0 = n /...

2019-03-04 15:43:02 14847

转载 HTTP1.0、HTTP 1.1、HTTP 2.0主要区别

概要说明HTTP1.0与HTTP 1.1的主要区别长连接 节约带宽 HOST域HTTP1.1与HTTP 2.0的主要区别多路复用 二进制分帧 首部压缩 服务器推送一、HTTP1.0与HTTP 1.1的主要区别长连接短连接:客户端和服务器每进行一次http操作,就建立一次连接,任务结束就中断连接。短连接的操作步骤是:建立连接——数据传输——关闭连接.....

2019-01-18 11:40:41 222

原创 简单的linux下C编写的聊天室C-Sdemo

写一个简单的聊天室,客户端发送消息,服务端回送发的消息的长度。1.服务端代码 tcp_server.c#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;#include&lt;string.h&gt;#include&lt;sys/types.h&gt;#include&lt;sys/socket.h&gt;#include&lt;un...

2019-01-16 17:52:57 498

转载 什么是过拟合 (Overfitting)

学习资料:Tensorflow: dropout 教程 PyTorch: dropout 教程 Theano: l1 l2 regularization 教程今天我们会来聊聊机器学习中的过拟合 overfitting 现象, 和解决过拟合的方法.注: 本文不会涉及数学推导. 大家可以在很多其他地方找到优秀的数学推导文章.过于自负 在细说之前, 我们先用实际生活中的一个例子...

2019-01-15 18:11:53 2573

原创 \n\r在windows、linux和mac系统换行的区别

windows下的换行是\r\nlinux下的换行是\nmac下的换行是\r 在Windows中:'\r' 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖;'\n' 换行,换到当前位置的下一行,而不会回到行首;Unix系统里,每行结尾只有“&lt;换行&gt;”,即"\n";Windows系统里面,每行结尾是“&lt;回车&gt;...

2019-01-08 14:17:49 1020

原创 把文件每行后面的数字去掉 以及 python读写文件时的编码问题

总结写在前面:python读取文件文件时,如果出现 'gbk' codec can't decode byte 0xac in position 7482: illegal multibyte sequence编码错误在读取文件的后面加一个b表示用二进制文件的格式打开with open(path,'rb') as file假设读取出来的文件放在line里面,我们要使用line时,需要解...

2019-01-07 14:48:09 997

原创 不同正则库使用的引擎以及自动机DFA/NFA

正则表达式引擎分成两类,一类称为DFA(确定性有穷自动机)Deterministic FiniteAutomation,另一类称为NFA(非确定性有穷自动机)。两类引擎要顺利工作,都必须有一个正则式和一个文本串,一个捏在手里,一个吃下去。DFA捏着文本串去比较正则式,看到一个子正则式,就把可能的匹配串全标注出来,然后再看正则式的下一个部分,根据新的匹配结果更新标注。而NFA是捏着正则式去比文本,...

2019-01-03 10:25:09 511

原创 C语言中各种类型的全局变量默认值

我们可以简单验证一下#include&lt;iostream&gt;#include&lt;string&gt;using namespace std;int a;char b;float c;double d;bool boo;string str;int *e;char *f;float *g;double *h;string *s;int main(){ ...

2018-12-28 14:32:33 4965 1

原创 静态库和动态库运行时间的区别

关于静态库和动态库的区别网上已经写了很多了,我就不再赘述,大家可以自行搜索。这里我主要介绍静态库和动态库在运行时间上的区别。我看书上写的是静态库比动态库在运行速度上快1%~5%。然后我写了一段程序test.c#include&lt;stdio.h&gt;void writeFile(void){    int i = 0;    for(;i&lt;100000;i++){...

2018-12-28 14:05:44 1779

原创 gdb命令

gdb是linux下非常好用的一个调试工具,它的功能强大到你无法想象,这里简单介绍下gdb下常用的命令。1.首先编译生成可执行文件(这里的test.c是一个简单的c程序)。gcc -g -o test test.c(-g选项告诉gcc在编译程序时加入调试信息)。接下来就可以运行程序gdb ./test然后我们就进入gdb模式2.然后我们可以再开一个Linux命令窗口ps...

2018-12-25 15:37:46 118

原创 taskset:指定进程在某个cpu运行

taskset用于设置或检索一个给定的运行过程与一个给定的CPU亲合力推出一个新的命令pidor CPU亲和力。CPU亲和力ascheduler属性,“债券”过程中一个给定的处理器的系统。Linux调度器将荣誉给予CPU亲和力和过程将notrun其他CPU。值得注意的是,Linux调度器还支持naturalcpu亲和:调度试图保持过程相同的CPU只要出于性能原因实际。因此,迫使一个特定的cpuaf...

2018-12-14 10:44:20 1283 1

原创 找出数组中第一个重复的元素

给定一个整数数组,找到其中的第一个重复元素。我们需要找到多次出现的元素,并且它的第一次出现的索引最小。例子:输入:arr [] = {10,5,3,4,3,5,6}输出:5 [5是重复的第一个元素]输入:arr [] = {6,10,5,4,9,120,4,6,10}输出:6 [6是重复的第一个元素]  我们可以使用排序来解决O(nLogn)时间内的问题。以下是详细步...

2018-12-11 17:41:12 1598

原创 构建工具Makefile的学习与使用

Makefile的教程较少而且不全,今天看到一个大牛的写的,还有他工作的经验,特地分享一下。陈皓 https://blog.csdn.net/haoel/article/details/2886https://blog.csdn.net/haoel/article/list/6还有整理的pdf文件,网上都有,如果需要的,可以评论。附上makefile中文手册http://www...

2018-12-11 17:23:55 131 1

原创 vector内存的分配与释放

http://www.cnblogs.com/biyeymyhjob/archive/2012/09/12/2674004.html

2018-10-25 23:56:47 204

原创 C++空类默认有哪些函数

默认构造函数、默认拷贝构造函数、默认析构函数、默认赋值运算符 这四个是我们通常大都知道的。但是除了这四个,还有两个,那就是取址运算符和 取址运算符 const即总共有六个函数。 一个示例如下:class Empty{public: Empty(); // 缺省构造函数 Empty( const Empty&amp; ); // 拷贝构造函...

2018-10-19 11:23:11 1107

原创 四人帮--23种设计模式

序号 模式 &amp; 描述 包括 1 创建型模式 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Sing...

2018-10-11 20:05:10 2395

空空如也

空空如也

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

TA关注的人

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