- 博客(184)
- 资源 (3)
- 收藏
- 关注
转载 c++:尽量用new/delete代替malloc/free
在C语言中,我们已经熟悉利用malloc/free来管理动态内存,而在C++中,我们又有了新的工具:new/delete。你不禁会产生疑问—有了malloc/free为什么还要new/delete 呢?使用malloc/free和使用new/delete又有什么区别呢?首先来分析一下下面的代码片段:class Object{public:Object() {cout << "Hello,
2017-06-19 19:19:30
4150
原创 overload与override
先说overload,重载: 成员函数被重载的特征: (1)相同的范围(在同一个类中); (2)函数名字相同; (3)参数不同; (4)virtual关键字可有可无。再说重写,override: 重写是指派生类函数重写基类函数,是C++的多态的表现,特征是: (1)不同的范围(分别位于派生类与基类); (2)函数名字相同; (3)参数相同; (4)基类函数必须有virtual关键
2017-06-19 19:01:06
508
原创 c++浅拷贝与深拷贝
什么是拷贝构造函数? 首先,关于c++拷贝构造函数:拷贝构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它必须的一个参数是本类型的一个引用变量。 对于一个类X, 如果一个构造函数的第一个参数是下列之一: a) X& b) const X& c) volatile X& d) const volatile X&且没有其他参数或其他参数都有默认值,那么这个函数是拷贝构
2017-06-19 18:28:21
344
转载 c/c++程序的内存布局
程序代码段: 代码段是用来存放可执行文件的操作指令,它是可执行程序在内存中的映像。代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作——它是不可写的。程序数据段: 存放可执行文件中已经初始化的全局变量,静态变量 BSS段: 包含了程序中未初始化的全局变量,在内存中全部置零 堆: 堆是用于存放进程运行中被动态分配的内存段,它大小并不固定,可动态扩张或缩减。当进程
2017-06-19 12:57:40
693
转载 C++虚继承与继承
虚继承 1、why用虚继承? 为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置为虚基类。这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也只有一个映射。这样不仅就解决了二义性问题,也节省了内存,避免了数据不一致的问题。 class 派生类名:virtual 继承方式 基类名 virtual是关键字,声明该基类为派生类
2017-06-16 16:13:37
428
原创 cups数据自动导入软件开发
1.环境配置与疑难问题解决 先是在我自己电脑上开发的,最终环境如下: win7 64位,python3.4.4 64位,Oracle 11g Release 2 (11.2.0.1.0) 64位 另,编辑器用的notepad++和ultraedit oracle 下载:要先在oracle官网注册账号,32位下载地址 64位下载地址 安装:即使版本对了也是各种问题
2017-06-15 20:05:35
562
转载 设计模式:单例模式
单例模式: 个人认为单例模式是设计模式中最为简单、最为常见、最容易实现,也是最应该熟悉和掌握的模式。且不说公司企业在招聘的时候为了考察员工对设计的了解和把握,考的最多的就是单例模式。单例模式解决问题十分常见,我们怎样去创建一个唯一的变量(对象)?在基于对象的设计中我们可以通过创建一个全局变量(对象)来实现,在面向对象和面向过程结合的设计范式(如 C++中)中,我们也还是可以通过一个全局变量实现这一
2017-06-07 20:05:58
321
转载 设计模式六大原则
所谓无招胜有招,练一门功夫分为内功和外功。外功好比招式,就是所谓的23种设计模式。而内功呢,就是心法,那就是这6种法则。光会外功那是花拳绣腿,内功修为才是境界。如此众多的设计模式,学完2遍,3遍可能也会忘的只记得单例和工厂模式。但是只要原则记住,在以后的设计中,有意无意就会用的设计模式的精髓。单一职责原则 不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 问题由来:类T负责
2017-06-02 18:29:54
358
转载 设计模式:工厂模式
在面向对象系统设计中经常可以遇到以下的两类问题: ◆ 1.为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。这里很容易出现的一个问题 n 多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如 new ×××;的代码。 这里带来两个问题:
2017-06-02 11:07:42
450
转载 Fiddler工作原理
1 fiddler抓包是在 客户端和服务器之间建立一个代理服务器,监听本机发出的请求和服务器返回的响应结果。2 启动fiddler之前,先来看一下代理服务器设置. 默认没有代理服务器。 3 启动fiddler。再次查看代理服务器设置。 Fiddler工作原理:浏览器与服务器之间通过建立TCP连接以HTTP协议进行通信,浏览器默认通过自己发送HTTP请求到服务器。 而Fiddler是c#开发(
2017-06-01 21:11:35
11476
转载 c++类型转换
c++有两种强制转换:1、命名的强制转换 2、旧式的强制类型转换1、命名的强制转换 形式:cast-name(expression); type是要转换成的目标类型,expression是要转换的值 cast-name关键字有:static_cast, reinterpret_cast,const_cast,dynamic_cast cast-name指定了执行的是哪种转换。stati
2017-05-27 11:08:15
331
转载 c++拷贝构造函数详解
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。 下面看一个类对象拷贝的简单例子。#include <iostream> using namespace std; class CExample { private:
2017-05-26 22:10:30
339
转载 c语言:strtok()函数
函数原型:char * strtok ( char * str, const char * delimiters );参数列表:strC string to truncate.Notice that this string is modified by being broken into smaller strings (tokens).Alternativelly, a null point
2017-05-26 09:55:57
1723
2
原创 由to_string函数学习sprintf()及sscanf()函数的用法
今天看到VS里面的to_string()函数的实现,下面以int型参数的to_string为例介绍:inline string to_string(int _Val) { // convert int to string char _Buf[2 * _MAX_INT_DIG]; _CSTD _TOSTRING(_Buf, "%d", _Val); return (s
2017-05-25 22:43:11
1438
原创 常用排序算法的c++实现
闲来没事手打了一遍几种排序算法,分享以供大家参考:#include<iostream>using namespace std;//交换数组中2个元素的值void swap(int &a, int &b){ int tmp = a; a = b; b = tmp;}//冒泡排序最简单的暴力解法void bubble_sort(int a[], int n){
2017-05-25 21:56:57
357
转载 c++成员变量的初始化顺序
class A{private: int n1; int n2;public: A():n2(0),n1(n2+2){} void Print(){ cout << "n1:" << n1 << ", n2: " << n2 <<endl; }};int main(){ A a; a.Print(); return
2017-05-25 21:17:13
496
原创 图概论
有向图的通用性更强,因为无向图和混合图都可以转化为有向图 n个顶点无向图最多n(n-1)/2 条边 n个顶点有向图n(n-1) 条边 G=(V,E) vertex edge E=(u,v)图算法的时间空间性能,都与图结构的具体实现方式紧密相关,假定图的顶点个数为n,边数为e邻接矩阵:是图ADT最基本的实现方式,使用方阵A[n][n]表示由n个顶点构成的图,其中每个单元负责描
2017-05-25 16:58:28
632
转载 mysql锁定机制
为了保证数据的一致完整性,任何一个数据库都存在锁定机制。锁定机制的优劣直接应想到一个数据库系统的并发处理能力和性能,所以锁定机制的实现也就成为了各种数据库的核心技术之一。本文将对MySQL中两种使用最为频繁的存储引擎MyISAM和Innodb各自的锁定机制进行较为详细的分析。MySQL锁定机制简介 数据库锁定机制简单来说就是数据库为了保证数据的一致性而使各种共享资源在被并发访问访问变得有序所设计的
2017-05-23 20:47:23
409
转载 shell特殊变量
特殊的shell变量: $0 获取当前执行的shell脚本的文件名 $n 获取当前执行的shell脚本的第n个参数值,n=1..9 $* 获取当前shell的所有参数 “11 2 $3 …,受IFS控制 $# 获取当前shell命令行中参数的总个数 $$ 获取当前shell的进程号(PID) $! 执行上一个指令的PID $? 获取执行的上一个指令的返回值(0 为成功, 非
2017-05-22 22:44:03
322
原创 Mysql表连接:外连接(左连接右连接)与内连接
mysql中的表连接分为内连接和外连接,其中外连接又分为左连接和右连接。 内连接仅选出两张表中相互匹配的记录,外连接除此之外还会选出其他不匹配的记录,我们一般最常用内连接。 下面建2个表,举例介绍表连接:create table user_id ( id decimal(18) );create table user_profile ( id decimal(18) , name varcha
2017-05-22 15:56:55
692
原创 python杂记
python写的快速排序算法:def qsort(seq): if seq==[]: return[] else: pivot=seq[0] lesser=qsort([x for x in seq[1:] if x <pivot]) greater=qsort([x for x in seq
2017-05-16 22:27:39
470
转载 浅谈数据库触发器
触发器:其是一种特殊的存储过程。一般的存储过程是通过存储过程名直接调用,而触发器主要是通过事件(增、删、改)进行触发而被执行的。其在表中数据发生变化时自动强制执行。 常见的触发器有两种:after(for)、instead of,用于insert、update、delete事件。 after(for) 表示执行代码后,执行触发器 instead of 表
2017-05-16 12:50:15
442
转载 awk详解:awk语言及应用
是时候归纳一下awk命令了。 awk是三个人名的缩写,他们是:Aho、(Peter)Weinberg和(Brain)Kernighan。正是这三个人创造了awk—一个优秀的样式扫描与处理工具。 作为linux三剑客之一,与sed和grep很相似,awk是一种样式扫描与处理工具,但其功能却大大强于sed和grep。awk提供了极其强大的功能:它几乎可以完成grep和sed所能完成的全部工作,同时
2017-05-16 09:10:23
1523
原创 补码与位运算
参与位运算的数字都是二进制补码的方式进行按位与、或、异或,所以先说说二进制:原码、反码、补码。 在C语言中,原码、反码、补码都是有符号定点数的表示方法。一个有符号定点数的最高位为符号位,0是正,1是负,下面统一以8位的整数为例介绍这几种码:原码: 如果机器字长为n,那么一个数的原码就是用一个n位的二进制数,其中最高位为符号位:正数为0,负数为1。剩下的n-1位表示概数的绝对值。 例如: X=+
2017-05-10 10:03:36
4379
转载 Oracle数据库:实例、用户、表、表空间
数据库: Oracle数据库是数据的物理存储。这就包括(数据文件ORA或者DBF、控制文件、联机日志、参数文件)。其实Oracle数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是Oracle就只有一个大数据库。实例: 一个Oracle实例(Oracle Instance)有一系列的后台进程(Backguound Processes)和内存结构(Memory Str
2017-05-09 22:19:25
2295
原创 数据库范式:1NF、2NF、3NF、BCNF
首先要明白”范式(NF)”是什么意思。按照教材中的定义,范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。很晦涩吧?实际上你可以把它粗略地理解为一张数据表的表结构所符合的某种设计标准的级别。就像家里装修买建材,最环保的是E0级,其次是E1级,还有E2级等等。数据库范式也分为1NF,2NF,3NF,BCNF,4NF,5NF。一般在我们设计关系型数据库的时候,最多考
2017-05-09 20:20:26
6149
原创 STL:set详解
和vector、list不同,set、map都是关联式容器。set内部是基于红黑树实现的。插入和删除操作效率较高,因为只需要修改相关指针而不用进行数据的移动。 删除set的数据时,实际的操作是删除红黑树中的一个节点,然后相关指针做相关调整。指向其他元素的迭代器还是指向原位置,并没有改变,所以删除一个节点后其他迭代器不会失效。list和map也是同样的道理。 然而删除vector中的某个元素,vec
2017-05-09 10:14:21
651
原创 根据前序中序遍历,重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 解题思路:和我之前一篇博客,根据前序中序遍历确定后序遍历的文章一个思路,都是抓住前序遍历中的根节点位置,递归的把中序遍历中的根 与左右子树拿出来,然后无论是
2017-05-08 22:16:59
1391
原创 二叉树遍历:已知前序中序输出后序/已知后序中序输出前序
例子:前序:1, 2, 3, 4, 5, 6(根左右) 中序:3, 2, 4, 1, 6, 5(左根右) 后序:3, 4, 2, 6, 5, 1(左右根) 1、先说根据前序中序求后序,前序总是沿着根往树的左边一直跑,所以前序遍历的前面肯定是根节点 中序则是按照:左—–根—–右 的顺序排列,其中左,右子树按照同样的结构,所以我们可以从前序遍历的根节点入手,迅速定位中序序列的结构中左子树和
2017-05-07 17:52:47
7890
5
转载 huffman编码解码与huffman树
定义:给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。构建huffman树:1.根据给定的n个权值{w1,w2,…,wn}构成二叉树集合F={T1,T2,…,Tn},其中每棵二叉树Ti中只有一个带权为wi的根结点,其左右子树为空.2.在F中选取两棵
2017-05-07 16:15:35
1122
原创 stl:stack详解
今天写八皇后的算法,采用试探回溯法使用到了c++的stack,然后牵扯出一些毛病让我加深了对c++标准库的stack的理解,我甚至觉得stl 的stack实现的非常简陋,很多不便之处,下面具体分析。 首先贴上vs2013下面的stack源码,跟stl一样,stack默认都是基于deque实现的,所以代码看上去相对其他的数据结构比较简洁,下面贴出主要的源码:template<class _Ty,
2017-05-04 22:48:46
2945
1
转载 有向无环图:AOV网与AOE网
有向无环图(Directed Acycline Graph, DAG)是一类特殊的有向图。DAG有着广泛应用,AOE网和AOV网都是DAG的典型应用。AOV网(Activity On Vertex NetWork)用顶点表示活动,边表示活动(顶点)发生的先后关系。 若网中所有活动均可以排出先后顺序(任两个活动之间均确定先后顺序),则称网是拓扑有序的,这个顺序称为网上一个全序。(详情参见离散数学/图
2017-05-03 10:58:22
5342
原创 tornado框架的学习与应用
简单介绍一下所使用的高并发框架tornado,它是一个用python编写的可扩展的非阻塞式web服务器及其相关工具的开源框架,在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中。 先简单介绍一下 用tornado实现的经典helloworld程序如下:import tornado.ioloopimport tornado.webclass
2017-05-02 21:33:34
4404
原创 异或运算的应用与nimm博弈
异或运算的性质 1、交换律 2、结合律(即(a^b)^c == a^(b^c)) 3、对于任何数x,都有x^x=0,x^0=x 4、自反性 A XOR B XOR B = A xor 0 = A 5、消去率 a^b=c^b;则一定有a=c ,这一条是and or都不能满足的,只有+ -才会有的 应用1:所有的程序教科书都会向初学者指出,要交换两个变量的值,必须要引入一个中间变量。但如果
2017-04-28 16:52:31
1197
原创 并查集算法(union-find)
就动态连通性这个场景而言,我们需要解决的问题可能是: 给出两个节点,判断它们是否连通,如果连通,不需要给出具体的路径 给出两个节点,判断它们是否连通,如果连通,需要给出具体的路径就上面两种问题而言,虽然只有是否能够给出具体路径的区别,但是这个区别导致了选择算法的不同,本文主要介绍的是第一种情况,即不需要给出具体路径的Union-Find算法,而第二种情况可以使用基于DFS的算法。 题目1:畅通
2017-04-27 17:06:32
989
原创 c++类的访问控制与继承
对于类的成员,访问权限所控制的是类的实例对象对类中的成员的访问能力;而继承关系中访问权限所控制的是子类对于父类的数据成员的访问与使用能力。 private,public,protected方法的访问范围.(public继承下) private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问. 被private修饰的成员只能被同一个类中的成员函数或在该类中声明的
2017-04-20 10:55:32
747
原创 python实例方法、静态方法、类方法
class Foo(object): def test(self)://定义了实例方法 print("object") @classmethod def test2(clss)://定义了类方法 print("class") @staticmethod def test3()://定义了静态方法 print("s
2017-04-17 21:08:10
688
转载 python并发库:concurrent.futures的使用
第一次接触futures这个库是在tornado中,4.0的tornado会经常的使用他,因为tornado本身的那个corouting的异步功能,是需要逻辑里面所调用的模块本身就支持异步才可以的。而且如果用futures之后,在一定程度上缓解了这个事情。 concurrent.futures 是python3新增加的一个库,用于并发处理,提供了多线程和多进程的并发功能 类似于其他语言里的线程池(
2017-04-06 22:47:40
11249
转载 python生成器:使用yield关键字定义迭代器
关于Python中的yield在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor)。一、迭代器(iterator)在Python中,for循环可以用于Python中的任何类型,包括列表、元祖等等,实际上,for循环可用于任何“可迭代对象”,这其实就是迭代器迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前
2017-04-06 21:33:02
1297
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅