随笔分类 -  C++

c++模板特化
摘要:针对一个模板参数的类模板特化的几种类型, 一是特化为绝对类型; 二是特化为引用,指针类型;三是特化为另外一个类模板这里用一个简单的例子来说明这三种情况:templateclass compare{public: static boolIsEqual(constT&lh,constT&rh) { ... 阅读全文

posted @ 2015-03-18 10:18 极限游乐园 阅读(236) 评论(0) 推荐(0)

模板
摘要:模板:类模板和函数模板。 一、模板实参推断: 定义:从函数实参确定模板实参的类型和值的过程叫做模板实参推断。 1、多个类型形参的实参必须完全匹配。 template int compare (const T& v1, const T& v2) { if(v1 int compare(const A& vi, const B& v2)。。。 2、类型形参的实参的受限转换。 一般不会转换实参以匹配已有的实例化,会产生新的实例。 编译器只会接受两种转换: const转换:接受const引用或const指针的函... 阅读全文

posted @ 2013-08-25 23:23 极限游乐园 阅读(407) 评论(0) 推荐(0)

引用计数
摘要:引用计数的实现:template class ReferenceCount{public: explicit ReferenceCount(T* p):ptr(p),count(new int(1)){} ReferenceCount(const ReferenceCount& p) throw() : ptr(p.ptr),count(p.count) { ++*count; } ReferenceCount& operator = (const ReferenceCount& p) { if(this != &p) { dispose(); ... 阅读全文

posted @ 2013-07-27 14:19 极限游乐园 阅读(202) 评论(0) 推荐(0)

容器6:MAP
摘要:Map中根据元素的key自动对元素进行排序。这样一来,根据已知的key搜寻某个元素时,能够获得很好的性能,而根据已知的value搜寻元素时,性能就很糟糕。自动排序,使得map中不可以直接改变元素的key的值,要改变元素的key,必须先移除拥有该key的元素。 map的生成、复制 map c; 产生一个空的map,不含任何元素。 map c(op) 以op为排序准则,产生一个空的map。 map c1(c2) 产生一个map的副本,所有元素均被复制。 map c(beg,end) 以区间[beg,end]内的元素产生一个map... 阅读全文

posted @ 2013-07-10 22:48 极限游乐园 阅读(247) 评论(0) 推荐(0)

调用复制构造函数的时机
摘要:1、对象以值传递的方式传入函数参数2、对象以值传递的方式从函数返回3、对象需要通过另外一个对象进行初始化 拷贝构造函数原型,假设类名为Foo,则copy constructor为: Foo( const Foo &obj); 限定符必须是const,且必须是引用。 阅读全文

posted @ 2013-07-05 13:31 极限游乐园 阅读(154) 评论(0) 推荐(0)

C++容器内的元素
摘要:所有容器都会建立元素副本,并返回该副本,这意味着容器内的元素与你放进去的对象“相等”但非“同一个”。 STL容器元素必须满足的三个基本要求:1、必须可通过复制构造函数进行复制。 顺序容器的元素初始化都是通过复制初始化,所以不能复制的对象是不能存到容器中的,例如io对象。 既然是复制,那么一个对象放入容器中时必定要调用复制构造函数。2、必须可通过赋值操作符完成赋值动作。 容器和算法都使用赋值操作符,才能以新元素取代旧元素。3、必须可通过析构函数完成销毁动作 当容器元素被remove,它在容器内的副本将被销毁,因此析构函数绝不能设计为private。另:I、对序列式容器来说,元素的d... 阅读全文

posted @ 2013-07-04 23:16 极限游乐园 阅读(291) 评论(0) 推荐(0)

迭代器 配接器
摘要:1、Insert iterators 安插型迭代器 可使算法以安插方式而非覆写方式运作。可以解决算法的“目标空间不足”的问题。 安插型迭代器又有三类: I、Back inserters 安插于容器尾端 内部调用push_back,在尾端插入元素。可用的容器有三种:vector、deque、list。back_inserter(container) II、Front inserters 安插与容器前端 内部调用push_front,将元素安插于容器前端,这种动作逆转了被安插元素的次序。可用的容器deque和list。front_inserter(cont... 阅读全文

posted @ 2013-07-03 22:21 极限游乐园 阅读(160) 评论(0) 推荐(0)

仿函数
摘要:仿函数与一般函数的优势: 1、仿函数是“smart functions”(智能型函数) 仿函数可以拥有成员函数和成员变量,即仿函数拥有状态。 2、每个仿函数都有自己的型别 每个仿函数有自己的型别。因此,可以将仿函数的型别当做template参数来传递。 从而指定某种行为模式。 3、仿函数通常比一般函数速度快 就template概念而言,由于更多细节在编译期间就已确定,所以通常可能进行更好 的最佳化。所以,传入一个仿函数,可能获得更好的性能。 一、 针对“仿函数拥有属于自己的独特型别”的例子:class Person { public: std::string get... 阅读全文

posted @ 2013-06-30 22:43 极限游乐园 阅读(688) 评论(0) 推荐(0)