摘要: http是一个面向事务的应用层协议。 http规定http客户和服务器之间的每次交互都由一个ASCII码串和一个类似通用英特尔邮件扩充。 访问一个网站: 当点击一个链接时,会有一个URL(http://www.xxxxx.com/xxxx/xx.html) 1.浏览器分析URL 2.浏览器DNS请求 阅读全文
posted @ 2017-03-20 21:44 Przz 阅读(404) 评论(0) 推荐(0) 编辑
摘要: 转自:http://blog.chinaunix.net/uid-26275986-id-4109679.html TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现。一、滑动窗口协议 关于这部分自己不晓得怎么叙述才好,因为 阅读全文
posted @ 2017-03-20 21:40 Przz 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 以独立的语句将newed对象置入智能指针: 我们在这使用对象管理式资源,却可能造成资源的泄露。 上面主要有3三件事情需要完成: priority() new Widget share_ptr的构造函数 但是在C++中无法确定他们的调用顺序,于是可能出现下面这种: new Widget priorit 阅读全文
posted @ 2017-03-20 19:06 Przz 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 函数对象: 通常我们可以将函数作为参数传入另一个参数,比如qsort中传递函数指针。 STL函数对象则是函数指针的一种抽象形式。 传递方式: 由于标准库函数中,函数指针的传递是按照值传递的;所以函数对象在函数之间的传递也是 值传递 。 for_each示例: 函数对象示例: 合理设计: 因为函数对象 阅读全文
posted @ 2017-03-20 19:01 Przz 阅读(827) 评论(0) 推荐(0) 编辑
摘要: 函数子可匹接: 经常我们会同not1对函数返回进行转义: 但实际上isInteresting作为一个基本的函数指针,缺少not1所需要的函数定义。 unary_function和binary_function: 比较简便的方法就是从STL中继承上面这两个基类。所以函数子经常会出现下面这种代码 继承模 阅读全文
posted @ 2017-03-20 19:01 Przz 阅读(185) 评论(0) 推荐(0) 编辑
摘要: transform: 通过transform函数我们可以将一个仿函数作用域[begin,last)的每个元素身上,然后将结果保存到目标区间。 上述代码会将value中的元素调用transmogrify,然后通过赋值保存到results中。 但是这会出现一些问题, 因为results中没有对象,怎么可 阅读全文
posted @ 2017-03-20 18:59 Przz 阅读(207) 评论(0) 推荐(0) 编辑
摘要: operator[] 和 insert: map的[]操作和其他容器和内置[]没有关系 如果我们通过[]向map中插入or更新值,需要考虑一些东西 1.键已经存在,那么直接进行修改即可 2.键不存在,那么需要 值的默认构造创建一个新的对象,然后返回引用进行赋值 如果使用 operator[] 插入值 阅读全文
posted @ 2017-03-20 18:56 Przz 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 可重复插入?: 第二次调用insert,集合回去确认10是否已经存在。因为我们代入的比较函数是 = 祖父节点,所有当前值有可能与祖父值相同。 如果是右儿子,那么 =父亲节点 对于可能相等的情况判断一下 于是会先判断 (10b 10a)。如果两个都满足的话,两个点是不相同的。 但是判断函数换成了 le 阅读全文
posted @ 2017-03-20 18:55 Przz 阅读(405) 评论(0) 推荐(0) 编辑
摘要: remove: remove不是真正的删除,删除后数量并没有变化。 它接收一对迭代器,而不是一个容器,所以不知道它作用于哪个容器。 而且没有办法从一个迭代器获取对应于它的容器 实现 remove会用 需要保留的数据覆盖掉前面需要删除的数据 。然后返回一个需要被删除开始位置的迭代器。 所以通常需要结合 阅读全文
posted @ 2017-03-20 18:52 Przz 阅读(236) 评论(0) 推荐(0) 编辑
摘要: reserve: 强迫容器将它的容量变成n 可以避免不必要的重新分配 如果n大于当前容量,那么正常。 如果n小于当前容量,vector会忽略,string则是减小为 max(size(),n)。 如果我们需要大量的向容器中添加数据: for(int i = 0 ;i 阅读全文
posted @ 2017-03-20 18:50 Przz 阅读(263) 评论(0) 推荐(0) 编辑
摘要: allocator: 通常c++内存配置和释放操作是这样的: new算式主要有三个阶段: 调用::operator new配置内存 调用Fo::Fo()构造函数 返回一个对象的指针 allocator为了精密分工将步骤分开 1.allocate()和deallocatr()负责内存的配置和释放 2. 阅读全文
posted @ 2017-03-20 18:48 Przz 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 为什么要使用区间函数: v.insert(v.begin(),data,data+num); //显示循环: for(int i = 0 ;i 阅读全文
posted @ 2017-03-20 18:44 Przz 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 通常下面代码: 我们会觉得它们是是等价的。 为何empty()比较好? 主要是他们之间的效率有一定差距: empty对任意的容器都是常数时间 对于有点list实现,size需要线性时间 而size()则是通过区间遍历来数一数。 为何size()不能是常数的? 如果size()想在常数时间内实现,那么 阅读全文
posted @ 2017-03-20 18:42 Przz 阅读(755) 评论(0) 推荐(0) 编辑
摘要: 有时候我们希望知道迭代器所指的元素类型。 以迭代器所指声明对象: 可以通过func_impl的参数类型推导 但是推导机制只适用于参数,无法推导返回类型 声明内嵌型 特例化实现 如果T不是一个迭代器对象,而是一个原生指针,那么内置类型不适合 可以考虑指针特例化实现 traits萃取机 阅读全文
posted @ 2017-03-20 18:38 Przz 阅读(252) 评论(0) 推荐(0) 编辑
摘要: IO复用:使得程序能同时监听多个文件描述符 select: select在一段指定的时间内,监听用户感兴趣的文件描述符的 读、写、异常事件。 当调用了select之后整个进程就会被block。同时kernel会监听select负责的所有的socket.如果 相关的时间就绪就会返回。 但是select 阅读全文
posted @ 2017-03-20 18:11 Przz 阅读(183) 评论(0) 推荐(0) 编辑