摘要:
转自:http://blog.chinaunix.net/uid-26275986-id-4109679.html TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现。一、滑动窗口协议 关于这部分自己不晓得怎么叙述才好,因为 阅读全文
摘要:
以独立的语句将newed对象置入智能指针: 我们在这使用对象管理式资源,却可能造成资源的泄露。 上面主要有3三件事情需要完成: priority() new Widget share_ptr的构造函数 但是在C++中无法确定他们的调用顺序,于是可能出现下面这种: new Widget priorit 阅读全文
摘要:
函数对象: 通常我们可以将函数作为参数传入另一个参数,比如qsort中传递函数指针。 STL函数对象则是函数指针的一种抽象形式。 传递方式: 由于标准库函数中,函数指针的传递是按照值传递的;所以函数对象在函数之间的传递也是 值传递 。 for_each示例: 函数对象示例: 合理设计: 因为函数对象 阅读全文
摘要:
函数子可匹接: 经常我们会同not1对函数返回进行转义: 但实际上isInteresting作为一个基本的函数指针,缺少not1所需要的函数定义。 unary_function和binary_function: 比较简便的方法就是从STL中继承上面这两个基类。所以函数子经常会出现下面这种代码 继承模 阅读全文
摘要:
transform: 通过transform函数我们可以将一个仿函数作用域[begin,last)的每个元素身上,然后将结果保存到目标区间。 上述代码会将value中的元素调用transmogrify,然后通过赋值保存到results中。 但是这会出现一些问题, 因为results中没有对象,怎么可 阅读全文
摘要:
operator[] 和 insert: map的[]操作和其他容器和内置[]没有关系 如果我们通过[]向map中插入or更新值,需要考虑一些东西 1.键已经存在,那么直接进行修改即可 2.键不存在,那么需要 值的默认构造创建一个新的对象,然后返回引用进行赋值 如果使用 operator[] 插入值 阅读全文
摘要:
可重复插入?: 第二次调用insert,集合回去确认10是否已经存在。因为我们代入的比较函数是 = 祖父节点,所有当前值有可能与祖父值相同。 如果是右儿子,那么 =父亲节点 对于可能相等的情况判断一下 于是会先判断 (10b 10a)。如果两个都满足的话,两个点是不相同的。 但是判断函数换成了 le 阅读全文
摘要:
remove: remove不是真正的删除,删除后数量并没有变化。 它接收一对迭代器,而不是一个容器,所以不知道它作用于哪个容器。 而且没有办法从一个迭代器获取对应于它的容器 实现 remove会用 需要保留的数据覆盖掉前面需要删除的数据 。然后返回一个需要被删除开始位置的迭代器。 所以通常需要结合 阅读全文
摘要:
reserve: 强迫容器将它的容量变成n 可以避免不必要的重新分配 如果n大于当前容量,那么正常。 如果n小于当前容量,vector会忽略,string则是减小为 max(size(),n)。 如果我们需要大量的向容器中添加数据: for(int i = 0 ;i 阅读全文
摘要:
allocator: 通常c++内存配置和释放操作是这样的: new算式主要有三个阶段: 调用::operator new配置内存 调用Fo::Fo()构造函数 返回一个对象的指针 allocator为了精密分工将步骤分开 1.allocate()和deallocatr()负责内存的配置和释放 2. 阅读全文