上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 23 下一页
摘要: 这是最基本的String的实现/**ThebasicimplementationofString*/#include#include#includeusingstd::istream;usingstd::ostream;usingstd::cout;usingstd::endl;usingstd::cin;usingstd::setw;classString{public:friendistream&operator>>(istream&,String&);friendostream&operator(constString&)const;b 阅读全文
posted @ 2012-08-24 10:40 Mr.Rico 阅读(146) 评论(0) 推荐(0)
摘要: JM中的有用程序#if0/**1.dct方法*/#include#include#include#defineM16#defineBLOCK_SIZE4staticinttmp[M];voidforward4x4(int(*block)[M],int(*tblock)[M],intpos_y,intpos_x){inti,ii;int*pTmp=tmp,*pblock;staticintp0,p1,p2,p3;staticintt0,t1,t2,t3;//Horizontalfor(i=pos_y;i#include#include#defineM16#defineBLOCK_SIZE4sta 阅读全文
posted @ 2012-08-24 10:37 Mr.Rico 阅读(229) 评论(0) 推荐(0)
摘要: linux下的示例程序#if0/**1.遍历目录-1*/#include#include#include#includevoidshow_directory(char*path){DIR*dir;structdirent*entry;staticintcount=0;inti=0;intj=0;if(NULL==(dir=opendir(path)))printf("erroropeningdir\n");else{chdir(path);//system("pwd");count+=1;while(entry=readdir(dir)){//if(st 阅读全文
posted @ 2012-08-24 10:36 Mr.Rico 阅读(359) 评论(0) 推荐(0)
摘要: C++的示例程序:1.#if0/*1.C++中整数/浮点等转化为字符串*/#include//forthe//forostringstream#include//forstringtemplatestd::stringto_string(Tconst&obj){std::ostringstreamout;out//forthe>>operator#include//forostringstream#include//forstringtemplateTfrom_string(std::stringconst&str){std::istringstreamin(str 阅读全文
posted @ 2012-08-24 10:28 Mr.Rico 阅读(678) 评论(0) 推荐(0)
摘要: 第1章 跟踪范例 第2章 构造函数和析构函数 第3章 虚函数 1. 虚函数造成的性能损失 第4章 返回值优化 任何时候只要跳过了对象的创建和清除,就将会获得性能上的收益。返回值优化RVO(Return Value Optimization)是由编译器实现的优化,它用于加速源代码,是通过对源代码进行转化并消除对象的创建来实现的。 1. 按值返回的构造 下面是Complex类: classComplex{friendComplexoperator+(constComplex&,constComplex&);public:Complex(doubler=0.0,doublei=0.0 阅读全文
posted @ 2012-08-19 21:54 Mr.Rico 阅读(877) 评论(0) 推荐(0)
摘要: 条款1:指针与引用的区别 条款2:尽量使用C++风格的类型转换 条款3:不要对数组使用多态 条款4:避免误用的缺省构造函数 条款5:谨慎定义类型转换函数 隐式转换的实现方式:单参数构造函数和隐式类型转换操作符。 条款6:自增,自减操作符前缀形式和后缀形式的区别 条款7:不要重载&&,||或, 条款8:理解各种不同含义的new和delete new 操作符(new operator)和new 操作(operator new)的区别。 new操作符调用一个函数来完成必要的内存分配,你能够重写或重载这个函数来改变这个行为。new操作符为分配内存所调用的函数名字是operator ne 阅读全文
posted @ 2012-08-19 21:49 Mr.Rico 阅读(320) 评论(0) 推荐(0)
摘要: 条款01:视C++为一个语言联邦 条款02:尽量以const,enum,inline替换#define 条款03:尽可能使用const 条款04:确定对象使用前先被初始化 条款05:了解C++默认编写并调用哪些函数 条款06:若不想使用编译器自动生成的函数,就该明确拒绝 条款07:为多态基类声明virtual析构函数 条款08:别让异常逃离析构函数 1. 编译单元 为免除"跨编译单元之初始化次序"问题,请以local static 对象替换non-local static对象。为免除"跨编译单元之初始化次序"问题,请以local static 对象替换n 阅读全文
posted @ 2012-08-19 21:47 Mr.Rico 阅读(272) 评论(0) 推荐(0)
摘要: 这是摘自《More Effective C++ 2007》条款27:要求或禁止在堆中产生对象要求在堆中建立对象 让我们先从必须在堆中建立对象开始说起。为了执行这种限制,你必须找到一种方法禁止以调用"new"以外的其它手段建立对象。这很容易做到。非堆对象(non-heap object)在定义它的地方被自动构造,在生存时间结束时自动被释放,所以只要禁止使用隐式的构造函数和析构函数,就可以实现这种限制。把这些调用变得不合法的一种最直接的方法是把构造函数和析构函数声明为 private。这样做副作用太大。没有理由让这两个函数都是 private。最好让析构函数成为 private 阅读全文
posted @ 2012-08-19 14:21 Mr.Rico 阅读(831) 评论(0) 推荐(0)
摘要: 这是摘自《More Effective C++ 2007》 条款24:理解虚函数,多重继承,虚基类和RTTI所需的代价 当调用一个虚拟函数时,被执行的代码必须与调用函数的对象的动态类型相一致;指向对象的指针或引用的类型是不重要的。编译器如何能够高效地提供这种行为呢?大多数编译器是使用 virtual table 和 virtual table pointers。virtual table 和 virtual table pointers 通常被分别地称为 vtbl 和 vptr。 一个 vtbl 通常是一个函数指针数组。(一些编译器使用链表来代替数组,但是基本方法是一样的)在程序中的每个类只要 阅读全文
posted @ 2012-08-19 13:45 Mr.Rico 阅读(1011) 评论(0) 推荐(0)
摘要: 1. vector中元素的访问:[]与at操作 2. 调整vector的大小:reserve reserve是保证vector的容量至少为某个值,它不会减少vector的容量。 resize是改变vector的大小,这个操作比较严格,给出多少,结果vector的容量就变为多少。 3. sprint的替代方案 4. 定位new表达式 5. 模板特化与函数重载 类模板可以被偏特化或者全特化,函数模板则只能够被全特化 重载决议只决定选出主模板 分析下面的代码: #includeusingnamespacestd;templatevoidf(T){coutvoidf(T*){coutvoidf(int 阅读全文
posted @ 2012-08-18 16:22 Mr.Rico 阅读(321) 评论(0) 推荐(0)
摘要: 函数模板与类模板是两大类主要的C++泛型编程的使用方法。类模板可以进行模板偏特化和全特化,而函数模板只能进行全特化。但是类不同的是,函数还有一个重要的特性就是重载,如果将函数模板与函数重载的问题放在一块的时候,问题就变得比较麻烦了。 看下面的一个例子:includeusingnamespacestd;templatevoidf(T){coutvoidf(T*){coutvoidf(int*){cout(int*)"voidf(int*){cout(int*)"(int*)即调用的是第3个函数。这儿容易让人疑惑的是,为什么不是第4个函数:templatevoid f(int* 阅读全文
posted @ 2012-08-17 22:49 Mr.Rico 阅读(1050) 评论(0) 推荐(0)
摘要: 1. std::cin和std::cout的类型是什么? 简单的回答,cin实际上是: std::basic_istream> cout实际上是: std::basic_ostream> 首先,cin和cout具有的类型分别是std::istream和std::ostream,接着,这些类型是std::basic_istream和std::basic_ostream的typedef,最后,考虑到模板参数的默认值,得到上面的答案。 #include#includeintmain(intargc,char*argv[]){usingnamespacestd;(argc>2?ofs 阅读全文
posted @ 2012-08-17 21:18 Mr.Rico 阅读(453) 评论(0) 推荐(0)
摘要: 如果想要删除vector中值为val的元素,最容易想到的方法就是对vector进行遍历,然后遇到值为val时就将其删除。比较好的是vector容器有erase操作。但是这儿需要注意,与list中的erase不同,list的erase操作之后,之前获得的迭代器还是有效的,而在vector中因为vector是顺序存储,所以,一旦删除一个元素,之前获得的迭代器就会失效了,vector.begin()和vector.end()是变化的。注意到,erase的返回值是一个迭代器,而这个迭代器就是指向删除之前元素后的第一个元素。注意到这一点我们可以采用下面的方法实现:voidremove_v(vector& 阅读全文
posted @ 2012-08-17 14:51 Mr.Rico 阅读(11621) 评论(0) 推荐(0)
摘要: 1.Iterator使用设计准则2. 不区分大小写的string这儿主要是采用修改char_traists的方式来得到与标准库中string类似的类ci_string实例代码如下:View Code #include#include#includeusingnamespacestd;structci_char_traits:publicchar_traits{staticbooleq(charc1,charc2){returntoupper(c1)==toupper(c2);}staticboolne(charc1,charc2){returntoupper(c1)!=toupper(c2); 阅读全文
posted @ 2012-08-17 09:37 Mr.Rico 阅读(376) 评论(0) 推荐(0)
摘要: 第1章 C++编程基础 1. 另一种初始化语法:构造函数语法(直接初始化) 第2章 面向过程的编程风格 1. 函数声明给出就是函数原型 第3章 泛型编程风格 1. 泛型算法 2. 容器的insert操作:在position之前插入元素 3. 容器的erase操作删除position所指向的元素 4. 函数对象function objects 函数对象的使用: View Code #include#include#include#include#includeusingnamespacestd;intmain(){intn=10;vectorli;for(inti=0;i::iteratorit 阅读全文
posted @ 2012-08-16 13:52 Mr.Rico 阅读(628) 评论(0) 推荐(0)
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 23 下一页