C++
qianqiuyitong
这个作者很懒,什么都没留下…
展开
-
编程珠玑-如何给10^7个数据量的磁盘文件排序
http://blog.csdn.net/v_JULY_v/article/details/6451990http://tudian2007.blog.163.com/blog/static/3156641320128116561981/转载 2014-06-20 17:52:06 · 404 阅读 · 0 评论 -
Linux 虚拟内存
要讲虚拟内存,需要先讲几个概念1. 逻辑地址:逻辑地址是程序产生的段的偏移地址。example: 在C/C++ 中声明一个指针,通过&操作,可以读取这个指针本身值,这个就是逻辑地址,他是相对于当前进程数据段的地址。2. 线性地址:逻辑地址到物理地址变换的中间层。程序代码会产生逻辑地址,也就是段的偏移地址,加上段的基地址就可以构成线性地址。如果没有启用分页机制,那么线性地址就是物理地址。原创 2015-06-11 09:51:22 · 393 阅读 · 0 评论 -
C++中如何避免内存泄露
1. 在类的构造函数中new ,在类的析构函数中delete2. 函数中申请的内存,一定要在函数结束的时候释放。3. 基类和子类各自管理各自的内存,此时要注意将基类的虚函数声明为虚函数.(这样做是为了确保当用一个基类指针删除一个派生类的对象时,派生类的析构函数会被调用)。4. 同时还要注意的是,记得把重写拷贝构造函数,需要给类增加一个引用计数,记录有多个指针指向这块内存。防止重复当原创 2015-06-09 22:34:03 · 587 阅读 · 0 评论 -
socket C/C++ linux
1. socket 其实也是文件描述符,从本质上讲跟普通文件没有什么区别。所以read和write 同样适用于socket,但是linux也提供了专门的接口。2. 对于TCP来说: size_t recv(int sockfd,void* buf,size_t len,int flags) 前三个参数的意义很好理解,最后一个参数的意义如下所示。 size_t send(int soc原创 2015-06-09 21:49:37 · 371 阅读 · 0 评论 -
生成随机数
1. 已有一个随机数发生器,生成0的概率是p,生成1的概率是1-p。如何利用该发生器制作一个1~n的概率都是1/n的发生器。1> 1,2 00,01,10,11 01和10都是 p(1-p)2>1,2,3 100,001,010 p*p*(1-p)2. 已知有rand7()的函数,返回1到7随机自然数。利用rand7()构造rand10()随机数1~10 (r原创 2015-06-10 16:53:12 · 382 阅读 · 0 评论 -
给一个数组,求他的子串,使该子串的和最大
如果f[m-1]>0, f[m]=f[m-1]+a[m]f[m-1]解释如下:如果array[i,...k,....j]就是满足和最大的子串,那么对于任何k(iint kadane(const int array[],int length,int& left,int& right){int i,cur_left,cur_right;int max,cur原创 2015-06-10 15:46:32 · 438 阅读 · 0 评论 -
判断一个二叉树是否是完全二叉树
思想:采用广度优先遍历,从根节点开始入队,如果队列不为空,循环。遇到第一个没有左/右 孩子的节点,设置标志位,如果之后再遇到有左/右孩子的节点,那么这不是一棵完全二叉树。struct Node 5 { 6 int value; 7 Node* left; 8 Node* right; 9 }; 10 Queue queue; 11原创 2015-06-10 14:58:15 · 468 阅读 · 0 评论 -
C++ 中的智能指针
1. auto_ptr的使用1> 不用使用operator = ,这样会转移控制权。(下面会给出例子解释)2> 调用release并不会释放释放对象,仅仅是归还控制权。3> 由于operator = 的问题,不能将auto_ptr指针放进STL容器。4> auto_ptr不能指向数组,因为auto_ptr析构调用的时候只能调用delete,不能调用 delete[]cl原创 2015-06-10 11:25:26 · 328 阅读 · 0 评论 -
C++ 中的类型转换函数
1. 四种: static_cast,dynamic_cast,const_cast,reinterpret_cast2. 他们的使用1>static_cast: 任何隐式转换都可以由它完成,仅当类型之间可隐式转换时(除类层次间的下行转换),static_cast的转换才是合法的,否则将出错。 class A 4 { 5 public: 6 virtu原创 2015-06-09 22:45:31 · 509 阅读 · 0 评论 -
placement new的用法
1. 平时new一个对象都是在堆上分配内存,但是要先找出哪块内存是空闲的,堆是用链表实现的,这样的话效率有点低,所以可以预先申请出一块比较大的内存,当需要申请对象的时候就在这块已经开辟好的空间分配。 同时也避免了内存分配不足的情况。2. 使用方法:1> 提前分配空间class MyClass{......}char* buf=new char[N*sizeof(MyClass)原创 2015-06-09 22:03:14 · 332 阅读 · 0 评论 -
C++ 多态的一些理解
1. C++ 中的多态,简单来说是用基类的指针指向子类的对象,然后用这个基类指针就可以调用子类对象的方法(这些方法在基类中有,且被声明为虚函数);如果一个方法没有被声明为虚函数,则调用哪个方法取决于指针的类型。2. 这是自己写的一个例子class A{public:virtual void say(){cout}};class B:public:原创 2015-06-09 09:55:27 · 337 阅读 · 0 评论 -
new delete malloc free的区别
1. malloc free 是C中使用的关键字,new delete 是C++中使用的关键字2. new 和delete 分成两步 1> 分配内存空间,会根据类型自行计算 2> 调用构造函数,构造对象 malloc 只是完成了第一步,分配了内存空间。返回的是内存的起始地址,如果分配失败返回NULL。 delete : 1> 调用析构函数 2> 释放内存空间原创 2015-06-09 10:57:59 · 310 阅读 · 0 评论 -
C++ 中的map
1. C++ 中的map想必大家都用过,我也是大一的时候就使用过,但是一直到最近的一个项目才发现对于C++中的map,自己认识的竟然是如此粗浅。2. set和map一样都是有序的,用树作为存储结构。主要的函数:1> 构造函数: map MAP;2> 插入数据:1. map.insert(pair(1,"hello"));2. map.insert(map::value_ty原创 2015-06-09 10:21:59 · 477 阅读 · 0 评论 -
程序员面试题精选(17)-把字符串转换成整数_资料存档
http://zhguiqiang.blog.163.com/blog/static/9993752200861310505693/程序员面试题精选(17)-把字符串转换成整数2007年10月17日 星期三 下午 10:03题目:输入一个表示整数的字符串,把该字符串转换成整数并输出例如输入字符串"345",则输出整数345 分析:这道题尽管不是很转载 2014-07-31 09:19:04 · 579 阅读 · 0 评论 -
编程珠玑-如何给10^7个数据量的磁盘文件排序
/磁盘文件排序位图方案的伪代码 //copyright@ Jon Bentley //July、updated,2011.05.29。 //第一步,将所有的位都初始化为0 for i ={0,....n} bit[i]=0; //第二步,通过读入文件中的每个整数来建立集合,将每个对应的位都置为1。 for each i转载 2014-06-20 17:50:08 · 460 阅读 · 0 评论 -
寻找最近公共祖先
http://www.cppblog.com/myjfm/archive/2011/05/12/146282.aspxhttp://blog.csdn.net/cxllyg/article/details/76359921、看递归就知道其实还是深度遍历这棵树;2、首先使当前节点u的父指针指向自己;3、处理u的所有孩子节点,每处理完一个孩子节点就让孩子节点的父指针转载 2015-06-10 22:28:26 · 454 阅读 · 0 评论