- 博客(11)
- 资源 (3)
- 收藏
- 关注
原创 STL中的容器对比
1.序列式容器 容器内部各个元素的位置取决插入的方式,与元素本身无关 vector :动态数组,连续存储 deque:双端队列,分片连续存储 list:双向链表 2.关联容器 容器内部元素的位置取决于特定的排序和元素值本身 set,multiset:内部数据组织采用红黑树(一种严格意义上的平衡二叉树). map存储key-value对,按key排序,map的内部数据结构也
2015-03-31 10:25:43 443
原创 各种排序性能比较
1. 性能与初始位置无关的 堆、归并、二分插入 :因为都是原始数据对半分开比较排序 选择排序:比较次数与初始位置无关,交换次数有关 2.性能与初始位置有关 冒泡:如果不设置标志,比较次数与初始化位置无关,但是如果设置标志,对于已经排序的序列,第一趟冒泡就知道全都排好序了 插入排序:排序与否影响插入位置,移动元素个数 -------------------------------
2015-03-28 10:50:13 1335
原创 数据库 三范式
1. 1范式 无重复的列,列不能再分 2. 2范式 有主键,且非主属性得完全依赖主键,不能只依赖主键的一部分-------非主属性 非不部分依赖 主键 3. 3范式 非主属性不能依赖非主键------非主键的列只能依赖主键,不能依赖其他的列
2015-03-27 16:02:14 443
转载 c++虚继承
转自:http://www.cnblogs.com/BeyondAnyTime/archive/2012/06/05/2537451.html 1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继
2015-03-23 21:44:58 400
原创 c++ 虚函数
虚继承 #include using namespace std; class Parent { public: void func(int i){ cout << "Parent::func(int i)" << endl; } virtual void func2() { cout << "Parent::func2()" << endl; } virtual vo
2015-03-22 22:31:50 426
原创 构造函数、初始化列表的调用顺序
#include using namespace std; class ParentA { public: ParentA() { cout } ~ParentA() { cout } }; class ClassB { public: ClassB(int b) { cout } ~ClassB() { cout } };
2015-03-22 20:58:10 958
转载 借shared_ptr实现copy on write 以减少锁的使用
shared_ptr是引用计数智能指针,如果当前只有一个观察者,那么引用计数为1,可以用shared_ptr::unique()来判断 对于write端,如果发现引用计数为1,这时可以安全地修改对象,不必担心有人在读它。 对于read端,在读之前把引用计数加1,读完之后减1,这样可以保证在读的期间其引用计数大于1,可以阻止并发写。 比较难的是,对于write端,如果发现引用计数大于1,该如何
2015-03-11 09:33:30 578
转载 c++可变类型
可变类型解决方案 1.void*. 这种方法不是类型安全的 2. boost::any 任意类型的类型安全存储以及安全的取回 在标准库容器中存放不同类型的方法,比如说vector
2015-03-06 15:19:54 2150
转载 线程进程通知
进程线程的等待通知: pipe :单向 socketpair:双向 eventfd eventfd 是一个比 pipe 更高效的线程间事件通知机制,一方面它比 pipe 少用一个 file descripor,节省了资源;另一方面,eventfd 的缓冲区管理也简单得多,全部“buffer” 只有定长8 bytes,不像 pipe 那样可能有不定长的真正 buffer。 线程
2015-03-04 10:50:03 768
转载 定时函数
定时函数,用于让程序等待一段时间或安排计划任务 首选timerfd_* 的原因: sleep / alarm / usleep 在实现时有可能用了信号 SIGALRM,在多线程程序中处理信号是个相当麻烦的事情,应当尽量避免 nanosleep 和 clock_nanosleep 是线程安全的,但是在非阻塞网络编程中,绝对不能用让线程挂起的方式来等待一段时间,程序会失去响应。正确的做法是注
2015-03-03 15:24:37 784
转载 TCP网络编程最本质是的处理三个半事件
TCP网络编程最本质是的处理三个半事件 连接建立:服务器accept(被动)接受连接,客户端connect(主动)发起连接 连接断开:主动断开(close、shutdown),被动断开(read返回0) 消息到达:文件描述符可读 消息发送完毕:这算半个。对于低流量的服务,可不必关心这个事件;这里的发送完毕是指数据写入操作系统缓冲区,将由TCP协议栈负责数据的发送与重传,不代表对方已
2015-03-03 09:11:42 1418
iNodeClient_Linux(32/64)
2015-11-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人