- 博客(52)
- 资源 (19)
- 收藏
- 关注
原创 STL源码:hash_set、hash_map、hash_multiset、hash_multimap
hash_set 虽然STL只规范复杂度和接口,并不规范实现方法,但STL set多半以RB-tree为底层机制。 SGI在标准之外提供了hash_set,以hashtable作为底层机制。用set为的是能快速搜寻元素。这一点无论底层是RB-tree还是hashtable都能实现。但RB-tree有自动排序能力而hashtable没有,其结果就是set元素会自动排
2015-03-31 18:23:00 1571
原创 STL源码:hashtable
前面介绍的RB-tree红黑树中,可以看出红黑树的插入、查找、删除的平均时间复杂度为O(nlogn)。但这是基于一个假设:输入数据具有随机性。而哈希表/散列表hash table在插入、删除、查找上具有“平均常数时间复杂度”O(1);且不依赖输入数据的随机性。 hash函数会带来一个问题:可能有不同的元素被映射到相同位置,这就是碰撞问题。解决碰撞的方法很多,hash table
2015-03-31 16:52:00 1646
原创 STL源码:multimap、multiset
multiset和multimap与set、map的特性以及用法完全相同,差别之一是它允许一个键对应多个实例,因为它们的插入操作使用的是底层RB-tree的insert_equal() 而不是insert_unique()函数。第二个差别multimap不支持下标运算,而map支持。 在电话薄中,每个人可能对应多个电话号码;作家会有多本对应的著作;这都需要用multimap来表
2015-03-31 15:55:23 1293
原创 STL源码:map、set与其他顺序容器的一些比较
map map的特性:所有元素会按照元素的键值自动排序。map所有元素都是pair,第一个元素视为键值,第二个元素视为实值;map不允许两个元素拥有相同的键值。 可以修改元素的实值,但是不能修改元素的键值(键值是const类型的),因此map的迭代器既不是constant Iterators,也不是mutale Iterators。set s
2015-03-31 08:54:17 1532
原创 STL源码:红黑树
红黑树的性质和插入操作这部分参考文章 《红黑树操作及实现》红黑树节点结构typedef bool __rb_tree_color_type;const __rb_tree_color_type __rb_tree_red = false; // 红色为0const __rb_tree_color_type __rb_tree_black = true; // 黑色为1s
2015-03-30 15:42:07 2837
原创 avl树的C++实现
//3avl_tree_c++.h#ifndef AVL_TREE_cplusplus_H#define AVL_TREE_cplusplus_H#include using namespace std;template class AvlTree{public: AvlTree():root(NULL) {} AvlTree(const AvlTree &rhs): r
2015-03-30 11:33:26 1526
原创 私有IP地址、回环地址
私有IP地址,不需要向有关IP管理机构申请,但只能供内网使用,而且同一内网中不能将同一IP分配给不同的主机。不能用在互联网上的路由。它们可以满足安全性,同时也节省了宝贵的IP地址空间。有了私有 IP地址,需要组建网络的个人用户和企业用户只有在内部使用私有IP地址并且运行良好,那么它的灵活性、扩展性和经济性都是很好的。既然私有IP地址不能 在互联网上路由,就需要NAT,即网络地址转换。最简单的一种方
2015-03-30 09:33:25 10793
原创 AVL树(Adelson-Velskii-Landis tree)
AVL树是一个“加上了额外平衡条件”的二叉搜索树。其平衡条件的建立时为了确保树的深度为O(longN)。AVL树要求任何节点左右子树的高度相差不超过1。插入操作:左-左插入和右-右插入需要单旋转; 左-右插入和右-左插入需要双旋转。
2015-03-27 10:34:31 1954
原创 STL源码:关联容器概论 树的概论
树的平衡 关联式容器的内部结构是一个平衡二叉树,以便获得良好的查找效率。平衡二叉树有很多类型,包括AVL-tree、RB-tree、AA-tree;其中,最广泛运用于STL的是RB-tree。 “平衡”的大致意义是:没有任何一个节点过深。不同的平衡条件,造就不同的效率表现以及不同的实现复杂度。上面提到的三类平衡二叉树均可以实现平衡二叉树,它们比一般二叉搜索树
2015-03-27 10:12:35 1260
原创 STL源码:slist
STL list是双向链表。SGI STL还提供了单向链表slist(single linked list)。这个容器不再标准范围内。 slist和list 的主要差别在于,前者迭代器是单向的Forward Iterator,后者迭代器是双向的Bidirectional Iterator,因此,slist功能会有很多限制;不过slis所耗空间小,某些操作快。 s
2015-03-27 09:32:27 1588
原创 位移操作的另类情况
在32位机器上进行左移操作,int型数a = 1左移32位的结果是什么?在vs2010,以及gcc下编译运行结果均为1,有类似下面的警告。为什么左移32位其值不变?警告:1>------ 已启动生成: 项目: test_C++, 配置: Debug Win32 ------1> test.cpp1>test.cpp(10): warning C4293: “>>”: Shift
2015-03-26 09:48:49 2470
原创 linux的COW(Copy-On-Write)
fork()后,子进程是父进程的副本。在fork之后exec之前两个进程用的是相同的物理空间(内存区),子进程的代码段、数据段、堆栈都是指向父进程的物理空间,也就是说,两者的虚拟空间不同,但其对应的物理空间是同一个。当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间,如果不是因为exec,内核会给子进程的数据段、堆栈段分配相应的物理空间(至此两者有各自的进程空间,互不影响),而代
2015-03-25 20:25:45 2317
原创 STL源码:priority_queue
优先队列完全以底部容器为依据,加上heap处理规则,实现很简单。缺省下以vector为底部容器,利用大根堆。它是一个有权值概念的queue(头出尾进,无其他存取元素的途径)。 和queue、stack一样,是容器适配器,详见queue#ifndef __STL_LIMITED_DEFAULT_TEMPLATEStemplate ,class Compare =
2015-03-25 19:45:29 1392
原创 STL源码:heap
heap不归属STL容器组件,它是priority queue的幕后英雄。为什么用二叉大根堆作为优先队列的底层机制? 答:优先队列允许用户以任何次序将任何元素插入容器,但取出时要从优先权最大的元素开始取。二叉大根堆具有这样的特性,因此作为优先队列的底层机制。 关于二叉堆实现优先队列的可行性见《二叉堆的插入删除等操作C++实现》能不能用li
2015-03-25 17:05:58 1311
原创 STL源码:stack
stack是先进后出的。和queue一样:(1)默认使用deque作为其底层元素; (2)它也是容器适配器(详见queue); (3)没有迭代器; (4)可以使用list作为底层容器。STL queue源码#
2015-03-25 16:54:39 1350
原创 STL源码:queue
queue是先进先出(FIFO)的数据结构,有两个口:允许从尾部加入元素、取得头部的元素。没有其他任何方法可以存取queue的其它元素,即queue不允许遍历行为。 SGI STL以deque作为缺省情况下的queue底部结构,queue的实现很简单,代码十分简短。 queue没有迭代器。为什么STL queue称为容器适配器而不是容器?
2015-03-25 16:15:17 2650
原创 STL源码:deque
deque概述 vector是单向开口的连续线性空间,deque是双向开口(在头尾分别做元素删除和插入操作)的连续线性空间。从技术上说,vector也可以在头尾两端操作元素,但是在头部操作的效率很差。 deque和vector的最大差异:(1)deque允许在头部快速进行元素插入或删除操作;(2)deque没有容量(capacity)的概念,因为它是动态地以
2015-03-25 09:49:50 2234
原创 STL源码:list
相较于vector的连续线性空间,list就显得复杂许多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。因此,list对于空间的运用有绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素移除,list永远是常数时间。 list不仅是一个双向链表,而且还是一个环状双向链表,因此迭代器必须具备前移和后移能力,所以list使用Bidirectional Iterato
2015-03-24 14:42:37 2096
原创 《unix网络编程》(6)网络字节序 大端模式和小端模式
大端模式和小端模式的定义a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。c) 网络字节序:TCP/IP各层协议将字节序定义为Big-Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。高/低字节有一个32位无符号
2015-03-24 10:03:04 1948
原创 STL源码:空间配置器(三)内存的配置和释放、SGI的两级适配器
空间的配置与释放std::alloc 之前了解了内存配置后的对象构造和内存释放前的对象析构行为,现在分析内存配置和释放。对象构造前的空间配置和对象析构后的空间释放,由负责,SGI对此的设计哲学如下: 1. 向 system heap 要求空间。 2. 考虑多线程(multi-threads)状态。 3. 考虑内存不足时
2015-03-23 10:41:13 2125
原创 STL源码:空间配置器(二)构造和析构construct()/destroy()
#ifndef __SGI_STL_INTERNAL_CONSTRUCT_H #define __SGI_STL_INTERNAL_CONSTRUCT_H // 欲使用 placement new,需先包含此文件 #include __STL_BEGIN_NAMESPACE // 以下是 des
2015-03-23 10:22:20 1575
原创 STL源码:空间配置器(一)SGI的空间配置器
SGI标准的空间配置器,std::allocator 虽然 SGI 也定义有一个符合部分标准、名为 allocator 的配置器,但 SGI 从未用过它,也不建议我们使用。主要原因是效率不佳,只把 C++ 的 ::operator new 和 ::operator delete 做一层薄薄的包装而已,根本没有考虑任何效率的强化。// 我们不赞成包含此文件,这是原始的 HP
2015-03-23 10:14:49 1319
原创 《unix网络编程》(4)缓冲区大小及限制
介绍影响IP数据报大小的限制。数据报大小 IPv4的数据报最大大小是65535字节,包括IPv4首部。因为首部中说明大小的字段(总长度字段)为16位。 IPv6的数据报最大大小是65575字节,包括40字节的IPv6首部。同样是展16位,但是IPv6首部大小不算在里面,所以总大小比IPv4大一个首部(40字节)。MTU 最大传输单元(m
2015-03-22 20:40:26 2053
原创 《unix网络编程》(3)TCP连接的建立和终止
TCP通过为每个字节关联一个序列号对所发送的数据进行排序。 为了很好地理解connect、accept、close这三个函数并使用netstat程序调试TCP应用,必须了解TCP建立和终止并掌握TCP的状态转换图。三次握手 (1)服务器必须准备好接受外来连接。通常通过socket、bind和listen函数来完成,称之为被动打开(passive o
2015-03-22 18:02:13 2060
原创 new与malloc的区别和联系
两者的相同之处 1、它们都可以申请动态内存和释放内存。C++中申请动态内存和释放内存用new/delete或者malloc/free都可以,而且它们的存储方式相同。 2、new与malloc动态申请的内存都位于堆中,无法被操作系统自动收回,要有相应的delete或者free来释放空间;对于内置数据类型,如int、char型,其效果是一样的。两者的区别
2015-03-22 16:00:25 6576
原创 STL源码:内存基本处理工具
STL定义了五个全局函数,作用于没有初始化空间上。前两个函数时用于构造的constr() 和用于析构的destroy()。另外三个是uninitialized_copy(),uninitialized_fill(),uninitialized_fill_n(),分别对应于高层次函数copy()、fill()、fill_n()——这些都是STL算法,要使用这三个底层次函数,应该包含,不过SGI将其实
2015-03-19 17:08:57 1463
原创 STL源码:vector
vector与array的相同与不同:相同: vector的数据安排以及操作方式与array很相似。不同: 两者的差别主要是在空间运用的灵活上。 array是静态空间,一旦配置了就不能改变;如果要换个大的空间,就要由客户自己来完成:重新申请新空间,然后将元素都从旧地址搬移到新地址,再将原空间释放。 vec
2015-03-19 15:22:21 2305
原创 基础排序算法总结
一、冒泡排序冒泡排序的普通思路: 比较相邻的两个元素,交换元素使得小元素在前、大元素在后。 第一次排序将对n个元素进行n-1次比较,将最大的元素放到了数组的最后边; 第二次排序将剩下的n-1个元素进行n-2次比较,将第二大的数放在数组的倒数第二个位置; 依次进行该过程; 第n-1趟则所有元素
2015-03-17 20:06:33 3123
原创 直接选择排序
直接选择排序和直接插入排序类似,都将数据分为有序的区域和无序的区域。所不同的是直接插入排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后。void Swap(int &a, int &b) { int tmp = a; a = b; b = tmp;}void SelectSort(int a[], int
2015-03-17 16:22:50 1807 1
原创 不借助变量交换两个数
交换两个数在排序算法中用的很多:冒泡排序中 、插入排序中等等。正常的交换两个数是借助一个变量tmp:void Swap(int &a, int &b) { int tmp = a; a = b; b = tmp;}在面试题中有这样的题目“不借助第三个变量,交换两个数”//A方法void Swap(int &a, int &b) { a = a + b;b = a - b;
2015-03-17 15:36:31 2071
原创 冒泡排序的改进
通常的冒泡排序 假设按照升序排序。 设数组大小为n;比较相邻的两个数,如果第一个大于第二个,则交换两个数据;这样,第一个排序后,比较了n-1次,最大的数在数组末尾。然后n = n- 1,在n不为0情况下继续排序,否则排序完成。void bubble_sort1(int a[], int size) { int i; for (i = 0; i <
2015-03-17 11:32:01 2354
原创 《unix网络编程》(2)网络模型和协议概述
OSI模型OSI(open system interconnection)开放系统互联模型是由ISO(国际标准化组织,International Organization for Standardization)定义的网络分层模型,共七层。 网络层由IPv4和IPv6两个协议处理。可以选择的传输层协议有TCP和UDP。上图的TCP与UDP之间留有空隙,表明网络应用可
2015-03-16 20:57:18 1612
原创 python提取网页的特定内容(正则表达式实现)
关于正则表达式参考正则表达式python可以很方便地抓取网页并过滤网页的内容,那么,如何从如下的网页中提取csdn文章的标题“《unix网络编程(卷1)源代码的使用方法》”。 window.quickReplyflag = true; 《unix网络编程(卷1)》源代码的使
2015-03-16 19:33:19 31550
原创 vi/vim常用命令
工作模式插入命令a 在光标后附加文本A 在本行行尾附加文本i 在光标前插入I 在本行行首插入文本o 在光标下面插入新的一行O 在光标上面插入新的一行定位命令h 左移一个字符/ 向左的箭头键j 下移一行 / 向下的箭头键k 上移一行 / 向上的箭头键l 右移一个字符 / 向右的箭头键$ 移动到行尾0(数字零)
2015-03-15 21:29:13 1437
原创 《unix网络编程》(1)源代码的使用方法
《unix网络编程(卷1)》源码下载地址可以从这里免费下载源码Ubuntu下源码的使用方法将下载的源码在Ubuntu下解压;控制台内进入解压后源码所在的目录。打开文件README,其内容如下:QUICK AND DIRTY===============Execute the following from the src/ directory: ./configu
2015-03-15 20:27:18 2680
原创 Python爬虫(一):基本概念
网络爬虫的定义 网络爬虫(Web Spider,又被称为网页蜘蛛,网络机器人,又称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫。如果把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。 网络蜘蛛是通过网页的链接地址来寻找网页的。从网站某一个页面(通常是首页)
2015-03-15 11:53:48 3228
转载 写给准备参加秋招的学弟学妹们
[-]一前言二面试简介三操作系统计算机网络数据库四算法 和 数据结构五C六JAVA七linux八逻辑分析题 智力题九行业了解十设计模式十一海量数据十二写在最后十三链接一、前言写给准备参加秋招的学弟学妹们 好久没写blog了,可能工作比较忙的原因吧。工作之后也略显疲惫,有点懒,不是很愿意动笔。不过由于今年秋招的临近,于是决
2015-03-15 10:44:08 2789 3
转载 千千万万的IT开发工程师路在何方
已经找不到该文章的最初出处了,有找到的人请告诉我,谢谢~~千千万万的IT开发工程师路在何方2007-06-25 21:41恭喜,你选择开发工程师作为自已的职业!悲哀,你选择开发工程师作为自已的职业!本文所指的开发工程师,仅指程序开发人员和以数字电路开发为主的电子工程师。当你选择计算机或者电子、自控等专业进入大学时,你本来还是有机会从事其它行业的,可你毕业时执迷不
2015-03-14 21:58:25 1694
原创 程序猿的简历一
徐舒,刻桌(http://www.kezhuo365.com)创始人阅读过5000+的简历(主要是社招),面试过几百个人,研发,产品,运营,市场,数据分析,测试,UIUE,HR都面试过。从面试者的角度,讲一下我个人对一份简历的预期和遇到的常见问题;(纯属个人喜好,不代表任何公司立场)首先,互联网行业简历书写没有定法,阅读你简历的都是一帮睡眼惺忪穿着人字拖的人,不需要你像给B
2015-03-13 17:04:11 2006
jsoncpp-src-0.5.0.rar.gz可正确编译的源文件
2015-12-11
DWR中文文档
2015-12-08
gethostbynameAndgetservbyname.tar.gz
2015-04-22
Visual_Assist_X_10.8.2036.0破解版以及破解方法
2014-12-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人