
【技术】STL 系列
多则惑少则明
让天下没有难测试的项目。专注于测试开发领域,近9+年的工作实战经验,主攻方向包括:
0-1/中期/成熟类大型/复杂系统的业务测试
自动化测试平台&框架开发;
打造质量体系及沉淀质量方法论
个人邮箱zpphnkjxy@126.com
文章周末定时更新,其余时间不定时更新
展开
-
vector 中的resize()与reserve()的区别
vector的reserve增加了vector的capacity,但是它的size没有改变!而resize改变了vector的capacity同时也增加了它的size!原因如下:含义不同:reserve1- reserve是容器预留空间,但在空间内不真正创建元素对象,2- 所以在没有添加新的对象之前,不能引用容器内的元素/使用下标访问。 3-加入新的元素时,原创 2014-02-21 08:58:39 · 980 阅读 · 0 评论 -
条款7:当使用new得指针的容器时,记得在销毁容器前delete那些指针
如果容器容纳的是指向通过new分配的对象的指针时:当一个指针的容器被销毁时,会销毁它(那个容器)包含的每个元素,但指针的“析构函数”是无操作!它肯定不会调用delete。例子:下面代码直接导致一个内存泄漏:void doSomething(){vector vwp;for (int i = 0; i vwp.push_back(new Widget);... /原创 2014-04-01 17:05:31 · 827 阅读 · 0 评论 -
条款16: 如何将vector和string的数据传给遗留的API
将vector和string的数据传给遗留的APIC风格API接受的是数组和char*指针,而不是vector和string对象。如果你有一个vector对象v,而你需要得到一个指向v中数据的指针,以使得它可以被当作一个数组,只要使用&v[0]就可以了。对于string对象s,相应的咒语是简单的s.c_str()。例子:传递v给这样的C风格的API:void doSomethi原创 2014-04-01 19:22:31 · 573 阅读 · 0 评论 -
hash表的实现
方法一:类似STL中hashtable的实现:摘录自《STL源码剖析》5.7.7节hashtable以质数来设计表格大小,预先计算好了28个质数,大约都是两倍的关系递增,查询28个质数中,“最接近且大于元素数目”的数字作为vector的长度,如果需要重新分配,则分配下一个质数长度的vector。Bucket所维护的linked list不采用STL的list或者slist(直接指针操作),原创 2014-03-19 10:45:44 · 986 阅读 · 0 评论 -
String 类的完整实现
class String{ char *name; public: String(); // String a,b; String(char *p); // String a("abc");String::String(const String &other) ~String(); //把申请的空间释放掉 S转载 2014-03-19 17:37:23 · 1003 阅读 · 0 评论 -
全排列 递归,非递归
原链接:http://blog.youkuaiyun.com/MoreWindows首先来看看题目是如何要求的(百度迅雷校招笔试题)用C++写一个函数, 如 Foo(const char *str), 打印出 str 的全排列,如 abc 的全排列: abc, acb, bca, dac,cab, cba全排列的非递归实现【没有重复】或者使用STL的pre_permutation算法也可以转载 2014-02-15 12:42:51 · 1004 阅读 · 0 评论 -
vector 的奥秘
vector类型的值初始化vector中如果没有指定元素的初始化式,将自行提供一个元素初始值进行值初始化。例如:如果保存内置类型(如int)的元素---------用0值创建元素初始化式:vector fvec(10); // 10 elements, each initialized to0如果含有构造函数的类类型的元素-------用该类型的默认构造函数[必须有默认构造函数转载 2014-02-15 09:40:05 · 602 阅读 · 0 评论 -
c++容器(vector|map)中使用函数指针
注意:容器中只能放类型,不能放函数指针变量名// 声明一个函数指针int(*pFunc)(int);int func1(int nIn){return nIn + 1;}int func2(int nIn){return nIn + 20;}typedef int(*pInt)(int);//定义别名才能放在vector中void main(){ pFunc转载 2014-03-07 17:13:51 · 2185 阅读 · 0 评论 -
Bridge模式/ Pimpl惯用法 实例
函数对象(仿函数)实现多态方法:1- 把仿函数类的数据和/或多态移到另一个类中。2-然后给你的仿函数一个指向这个新类的指针。例子:函数对象中的虚函数会出现分割问题(因为STL的函数对象作为参数/返回值时是通过值传递的)templateclass BPFC: // BPFC =“Big Polymorphicpublic // FunctorClass”u原创 2014-02-22 12:45:00 · 1243 阅读 · 0 评论 -
《STL源码剖析》traits技法
包括1】:萃取迭代器特性:iterator_traits2】:萃取型别特性__type_traits萃取迭代器特性原因—作用:因为:模板参数推导机制无法推导函数的返回值型别;所以:使用内嵌型别声明 typedef T value_type又因为:原生指针无法定义内嵌型别所以:对原生指针T*,指向const的指针(常对象的指针const T *)进行模板特化--原创 2014-02-18 17:02:24 · 1090 阅读 · 0 评论 -
使仿函数类可适配
四个标准函数适配器(not1、not2、bind1st和bind2nd)都需要存在某些typedef。所以这4个修饰的仿函数必须是可适配的;使得仿函数成为可适配的方法:仿函数类继承自unary_function或binary_function实现;注意1,传给unary_function或binary_function的类型与传给仿函数类的operator()和从那里返回的一样原创 2014-02-22 14:36:46 · 801 阅读 · 0 评论 -
STL部分算法
以vector和array为底层,实现heap算法的区别?array为低层实现时,对满载的数组,不能再进行push_heap()操作 不太方便,安全 低层以vector实现的例子 低层以array实现的例子 lower_bound/upper_bound特别注意:区别:若存在元素,lower_bound 返回指向元素的迭代器,u原创 2014-02-21 09:45:40 · 862 阅读 · 0 评论