随笔分类 -  C/C++笔记

摘要:第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 阅读(855) 评论(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 阅读(303) 评论(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 阅读(255) 评论(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 阅读(299) 评论(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 阅读(428) 评论(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 阅读(348) 评论(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 阅读(610) 评论(0) 推荐(0) 编辑
摘要:第12章 类1. 类的声明与定义:前向声明,不完全类型2. 从const函数返回*this3. 可变数据成员mutable4. 用于const对象的构造函数:构造函数不能声明为const5. 构造函数初始化式构造函数的执行分为两个阶段:初始化阶段和普通的计算阶段6. 构造函数初始化列表7. 默认实参与构造函数8. 类通常定义一个默认构造函数,不然的话使用起来会很麻烦。9. 使用默认构造函数10. 隐式类类型转换:使用explicit来杜绝隐式类类型的转换11. 类成员的显式初始化,这种显式初始化的方式是从C继承来的12. static类成员13. static成员函数14. static成员变 阅读全文
posted @ 2012-08-15 09:36 Mr.Rico 阅读(583) 评论(0) 推荐(0) 编辑
摘要:第2章 数据和基本类型 1. 整型 2. 习题:左值和右值 3. C++关键字/保留字和操作符替代值 4. 声明,定义, 初始化和赋值是不同的概念。 声明是说明一个变量的存在,不会为变量进行内存空间的分配。 定义是说明一个变量的存在,同时为这个变量分配对应的内存空间。 初始化就是在进行变量定义的时候在所分配的内存空间中同时填入有意义的值。如果不进行初始化的话,变量虽然有对应的内存空间,但是内存空间中对应 的内容却是无意义的。 赋值是为已经存在的变量的改写值,也就是重新擦写变量内存空间的数据,填入新的数据。 C++中因为有类的存在所以,对初始化进行了更细的划分,分为直接初始化和复制初始化。 C+ 阅读全文
posted @ 2012-08-15 01:59 Mr.Rico 阅读(509) 评论(0) 推荐(0) 编辑
摘要:练习5.9 自引用、 程序代码如下:View Code #includeusingnamespacestd;enumContext{c_comment,cpp_comment,string_literal,char_literal,file_end};voidhandle_c_comment(){charch;while(cin.get(ch)){if(ch=='*'){while(cin.get(ch)&&ch=='*');if(ch=='/')break;}}}voidhandle_cpp_comment(){charch;w 阅读全文
posted @ 2012-08-09 23:54 Mr.Rico 阅读(365) 评论(0) 推荐(0) 编辑
摘要:第1章 面向对象方法的优点1. C语言的目标2. C++语言的目标第2章 快速入门——C++简介1. C++关键字第5章 程序员定义数据类型的聚集第6章 内存管理:堆和栈1. 作用域2. 存储类型Static的用法第19章 总结 阅读全文
posted @ 2012-08-09 12:45 Mr.Rico 阅读(413) 评论(0) 推荐(0) 编辑
摘要:第1 章 使用字符串第7章 使用关联容器下面一个交叉引用表达代码,其中包括了getword函数View Code #include#include#include#includeusingnamespacestd;vectorgetwords(conststring&str){vectorret;staticstringdelim="\\/,.;:!~*`\'\"\t\b\n#(){}[]]&=-+";stringword;size_tpos,pos2;size_tlen=str.size();pos=-1;boolflag=true;wh 阅读全文
posted @ 2012-08-09 12:33 Mr.Rico 阅读(395) 评论(0) 推荐(0) 编辑
摘要:第2章 C++概述1. 数据类型的意义2. %的定义,与/的关系第7章 简单数据类型1. float与int差别2. 算数上溢与算数下溢第8章 流和文件1. 每次读取一个字符使用流输入输出的get函数和put函数2. 程序风格——使用流作为条件3. 使用ignore跳过换行符4. C++中的参数栈 阅读全文
posted @ 2012-08-06 18:06 Mr.Rico 阅读(189) 评论(0) 推荐(0) 编辑
摘要:Bjarne Stroustrup(本贾尼·斯特劳斯特卢普) 阅读全文
posted @ 2012-08-06 18:02 Mr.Rico 阅读(211) 评论(0) 推荐(0) 编辑
摘要:第1章 简介1. literate程序2. 宏指令与条件编译指令第2章 接口与实现1. 接口与实现的关系2. Arith接口及实现:arith.h:View Code /*$Id:H:/drh/idioms/book/RCS/inter.doc,v1.111997/02/2119:42:15drhExp$*/externintArith_max(intx,inty);externintArith_min(intx,inty);externintArith_div(intx,inty);externintArith_mod(intx,inty);externintArith_ceiling(in 阅读全文
posted @ 2012-08-06 00:35 Mr.Rico 阅读(1636) 评论(1) 推荐(0) 编辑
摘要:C程序设计语言(第2版)这儿有一篇写的很好的读后感:http://www.cnblogs.com/xkfz007/articles/2566424.html第1章 导言1. 单词计数#includeintmain(){intc,nl,nw,nc,flag;flag=0;nl=nw=nc=0;while((c=getchar())!=EOF){++nc;if(c=='\n')nl++;if(c==''||c=='\n'||c=='\t')flag=0;elseif(!flag){flag=1;++nw;}}printf(" 阅读全文
posted @ 2012-08-05 11:08 Mr.Rico 阅读(3585) 评论(0) 推荐(2) 编辑
摘要:第2章 数据类型与表达式 1. C++中的数据类型如下:2. C++中常量变量的值应该是可以变化的,怎么值是固定的量也称变量呢?其实,从计算机实现的角度看,变量的特征是存在一个以变量名命名的存储单元,在一般情况下,存储单元中的内容是可以变化的。对常变量来说,无非在此变量的基础上加上一个限定: 存储单元中的值不允许变化。因此常变量又称为只读变量(read-only-variable)。 请区别用#define命令定义的符号常量和用const定义的常变量。符号常量只是用一个符号代替一个字符串,在预编译时把所有符号常量替换为所指定的字符串,它没有类型,在内存中并不存在以符号常量命名的存储单元。而常变 阅读全文
posted @ 2012-07-27 13:49 Mr.Rico 阅读(732) 评论(0) 推荐(0) 编辑
摘要:第1章 C语言概述1. C语言出现的历史背景C语言是国际上广泛流行的高级语言。C语言是在B语言的基础上发展起来的。B (BCPL)语言是1970年由美国贝尔实验室设计的, 并用于编写了第一个UNIX操作系统,在PDP 7上实现。优点:精练,接近硬件,缺点:过于简单,数据无类型。 1973年贝尔实验室的D.M.Ritchie 在B语言的基础上设计出了C语言,对B取长补短,并用之改写了原来用汇编编写的UNIX,(即UNIX第5版),但仅在贝尔实验室使用。1975年UNIX第6版发布,C优点突出引起关注。1977年出现了《可移植C语言编译程序》 ,推动了UNIX在各种机器上实现 ,C语言也得到推广, 阅读全文
posted @ 2012-07-24 21:34 Mr.Rico 阅读(563) 评论(0) 推荐(0) 编辑
摘要:第1章 C++基础1. C++起源C的成功及广受欢迎是与UNIX操作系统密切相关。第3章 函数基础伪随机数第11章 名字空间1. 未命名空间文件是一个编码单元,例如类的实现文件,以及那些使用#include命令包含的文件,如类的接口文件。每个编码单元都有一个未命名的名字空间。所有在未命名空间中定义名字都局限于该编码单元中,所以这些名字在该编码单元之外可以重新使用。2. 使用未命名名字空间将某个定义局限于编码单元中。3. 混淆未命名空间和全局命名空间。4. 利用未命名名字空间代替static修饰词第12章 流和文件I/O操作1. 打开文件的方式使用open函数:ifstream ins;ins. 阅读全文
posted @ 2012-07-20 09:25 Mr.Rico 阅读(390) 评论(0) 推荐(0) 编辑
摘要:这本书主要介绍的是C++标准的TR1库。对相关的库都进行了介绍。类似一个参考手册。 前言 C++ TR1库简介 元组tuple 元组的tuple的声明 2. 创建tuple对象 使用make_tuple函数来创建tuple对象,但是make_tuple并不区分对象和对象的引用,两者都会得到和对象相同 类型的成员。 TR1库中的函数模板ref和cref可以创建包含引用的tuple对象。在头文件中定义。cref告诉make_tuple所要创建的成员是对常量类型的引用。 函数模板tie可以创建tuple对象包含对参数的引用。 程序代码:make_tuple.cc View Code #include 阅读全文
posted @ 2012-07-18 13:52 Mr.Rico 阅读(589) 评论(0) 推荐(0) 编辑