
C++ Primer
文章平均质量分 79
vv_VV_vv
这个作者很懒,什么都没留下…
展开
-
Chapter 3.数组和指针
数组和指针 在C++中数组和指针对应于vector和iterator。区别在于vector长度可变(push_back操作),再者vector的capacity一般就比size大一些;而数组一经创建,就不能添加新元素。指针也可以像iterator一样用于数组。C++程序应尽量使用vector(相比数组更易调试)和iterator,一般只有在强调速度时才在类的内部使用数组和指针。原创 2012-08-11 11:55:09 · 643 阅读 · 0 评论 -
Chapter 20.简单的erase后迭代器失效处理
顺序容器erase失效处理对vector、list、deque都适用//method 1.for(auto iter = iVec.begin(); iter != iVec.end();){ if(*iter == 100) { iter=iVec.erase(iter); //iter返回的是erase位置处的下一个元素的迭代器 } else {原创 2012-11-19 20:32:14 · 658 阅读 · 0 评论 -
Chapter 29.优化内存分配
简介C++中,内存分配和对象构造是一起的(new所做的工作就是为特定类型分配内存,并在新分配的内存中构造该类型的一个对象 ),但我们有时想自己管理内存分配、对象构造,即把内存分配和对象构造分离开来eg:如stl中vector会预分配一定额外内存,但不进行构造,因为对没有使用的内存构造对象是很浪费的,可能用永远不使用这部分额外的内存,所以内存分配和对象构造有时就需要分离开来alloc原创 2012-12-27 20:39:25 · 706 阅读 · 0 评论 -
Chapter 27.异常处理
异常处理Google不推崇异常处理,在构造函数中可以用返回值的init()函数替代,至少我也不喜欢异常处理,这里讲的简略一直没有注意,好像我用的引擎cocos2d-x也是有点google编码风格在里面eg://test中的例子 testBasic.cppTestScene::TestScene(bool bPortrait):m_bPortrait(bPortrait){原创 2012-12-26 22:40:48 · 807 阅读 · 0 评论 -
Chapter 28.命名空间、多重继承和虚继承
命名空间using声明eg:using std::list;//推荐using指示eg:using namespace std;防止命名空间污染,可不连续eg:namespace [NameSpaceName]{ //自成一域,在[NameSpaceName]这个命名空间中}命名空间可嵌套内部的成员会把外部的同名成员屏蔽eg:namespace原创 2012-12-26 23:18:41 · 643 阅读 · 0 评论 -
Chapter 26.模板与泛型编程
概述模板是泛型编程的基础面向对象编程是运行时多态,而泛型编程是编译时多态模板是在编译时编译器可以自动实例化的函数模板template //关键字class比较老,typename后来加入C++//因为相对来讲template是不怎么常用的编程,所以returnValue function(parameter);inline函数模板template原创 2012-12-15 18:16:20 · 786 阅读 · 0 评论 -
Chapter 24.重载操作符与转换
概述重载操作符是C++为类专门设计的一种机制,可以使类对象像内置类型一样的使用四个不能重载的运算符.类成员运算符.* 成员指针运算符:: 域解析运算符?: 条件表达式运算符重载的一些要求1.重载后的运算符与原先运算符的形参数、操作数数目、优先级、结合性要一致2.不能重载c++中不存在的运行符3.重载操作符必须有一个类类型或者枚举类型的操作数4.+、-原创 2012-12-15 17:16:57 · 911 阅读 · 0 评论 -
Chapter 25.面向对象编程
面向对象思想抽象 继承 封装 多态(动态绑定) java/c++动态绑定通过基类引用或指针调用虚函数时,发生动态绑定这里说明了动态绑定的两个条件1.调用函数为虚函数2.只有基类引用或指针来调用时,从这点上讲C++还不能完全支持面向对象编程,还要用指针和引用来实现引用或指针可以指向基类对象也可以指向派生类对象,这一事实是动态绑定的关键由被调用的引用或指针的实际类型原创 2012-12-15 17:35:27 · 563 阅读 · 0 评论 -
Chapter 30.类成员指针、嵌套类、局部类、联合、固有不可移植特征
类成员指针简介有时我们可能需要类中成员的指针(static明显不算,这个不是类成员),这就是类成员指针,分为两种,类数据成员指针和类成员函数指针eg://ClassMemberPointer.h#ifndef __CLASS_MEMBER_POINTER__#define __CLASS_MEMBER_POINTER__#include #include class S原创 2012-12-27 21:27:49 · 711 阅读 · 0 评论 -
Chapter 21.类简介
类类的简单定义:自定义的一个新类型和一个新作用域构造函数特殊成员函数,创建类类型的新对象都会执行。其工作就是保证每个对象的数据成员具有合适的初始值其不能有返回值,可有0个或者多个不同形参:无形参(或者形参全都有默认实参)的构造函数叫默认构造函数初始化方式:1.构造函数初始化列表,一般应顺序初始化数据成员constructor::constructor(const str原创 2012-12-01 15:33:58 · 480 阅读 · 0 评论 -
Chapter 4.表达式、语句、函数
表达式、语句、函数表达式sizeof操作符作用:获取类型长度格式: sizeof (typeName);sizeof (expr);sizeof expr;sizeof结果: char类型或值为char类型的表达式,sizeof保证得1 引用类型做sizeof返回存放此引用类型对象所需的内存空间大小 指针做siz原创 2012-08-16 23:19:36 · 1007 阅读 · 0 评论 -
Chapter 2.变量和类型
变量和类型C++基本内置类型C++:算术类型类型最小存储空间(单位:位/字节)bool-char8 / 1wchar_t16 / 2short16 / 2int(编译器实现基本整数倍于16位)16原创 2012-08-10 19:52:44 · 946 阅读 · 0 评论 -
Chapter 19.C++中的迭代器类型
插入迭代器front_inserter(c)//list、dequeback_inserter(c)//vector、list、dequeinserter(c,c_iter)//在c的c_iter处插入front_insertercopy(c.begin(),c.end(),front_inserter/back_inserter(insert_container));bac原创 2012-11-19 13:24:12 · 706 阅读 · 0 评论 -
Chapter 7.顺序容器list
list简介list被实现为双向链表,list在内存中元素是存放在不同且无关的地址上的,以一个元素为例,通过消耗一些额外的内存保存着两个关联,即前一个元素的关联[如果此元素为第一个元素则关联为空]和下一个元素的关联[如果此元素为最后一个元素则关联为空],可以通过迭代器访问tips: list的成员函数 remove、unique修改了其关联的基础容器,与泛型算法不同,而me原创 2012-09-13 23:20:51 · 671 阅读 · 0 评论 -
Chapter 18.正则表达式库regex
正则表达式关于正则表达式就不多做介绍了,vs2010中就已经支持这个c++的新特性,使用时可加入头文件regex,同时其被加入了std命名空间#include 下面就简单的介绍regex类的三个成员函数,同时对于regex迭代器的用法就不多说了,用到时再总结添加1.regex_match尝试匹配正则表达式的整个字符序列/*iter BidirectionalIter原创 2012-11-17 22:31:36 · 1907 阅读 · 0 评论 -
Chapter 5.IO
简单的IO类继承层次结构图简化一下,字母后都省略一个单词stream很简单的继承关系istream、ostream作为基类istream 派生出 ifstream、istringstream ; ostream 派生出 ofstream、ostringstream同时由 istream与ostream 共同派生出 iostreamiotream 派生出 fstr原创 2012-08-27 00:20:38 · 1026 阅读 · 0 评论 -
Chapter 8.顺序容器deque
deque简介deque被实现为双端队列,由多个连续内存块构成,deque是list和vector的兼容,分为多个块,每一个块大小是512字节,块通过map块管理,map块里保存每个块得首地址。因此该容器也有索引操作operator[ ],效率没vector高。,同样的也可以通过[]、at()来随机访问元素,所以在实现上面deque不保证在内存中以严格的连续地址存放,所以实现上面比原创 2012-09-13 23:36:50 · 627 阅读 · 0 评论 -
Chapter 10.顺序容器array[c++11]
array[c++11]简介array是一个固定大小的顺序容器,不能动态改变大小,array内的元素在内存中以严格的线性顺序存储与普通数组声明存储空间大小[]的方式是一样有效的,只是加入了一些成员函数和全局函数[get (array)、operators (array)],以便当作标准容器使用零大小的array是有效的,但是不可以被成员函数front、back、data间接引用原创 2012-09-15 22:33:56 · 2564 阅读 · 0 评论 -
Chapter 11.顺序容器forward_list[c++11]
前向链表简介前向链表是用单链表实现的,可在常量时间内在链表中做插入或删除操作list比之forward_list,双向链表要消耗额外的空间存储每个元素和在插入和删除元素时一个轻微的更高的时间开销,所以forward_list更有效率,虽然只能向前遍历。forward_list是唯一的标准容器中故意不给出size()成员函数的,这样是为了更高效而考虑,可以用distance(c.原创 2012-09-18 00:09:16 · 6058 阅读 · 0 评论 -
Chapter 12.特殊容器bitset
bitset简介bitset是一个特殊的容器用来存储位的状态,元素只可能是0、1或者true、falsebitset这个类非常类似一般的数组,但是被优化为一个元素只用1个位来存储,但是因为C++环境中不存在这么小的类型,所以用最小的bool类型来模拟bitset可以随机访问,即支持下标访问Constructor1.bitset ( );2.bitset ( unsi原创 2012-09-18 00:24:59 · 1092 阅读 · 0 评论 -
Chapter 6.顺序容器vector
vector简介vector类似C++内置数组,其元素在内存中连续存放,可以通过迭代器和下标进行随机访问,vector被实现为动态数组,还可以方便的实现自动增长[push_back()/insert()...]和自动缩小[resize()...]等vector的优点1.可以通过[]/at()来实现随机访问元素2.可以通过迭代器以多种顺序来遍历各元素3.可以高效的通过pu原创 2012-09-12 23:02:54 · 677 阅读 · 0 评论 -
Chapter 13.特殊容器string
string简介string对象是一个特殊类型的容器,被设计用来操作字符串与传统的c-string不同,传统的c-string是一个字符数组,而string对象属于一个类,类里面实现了大量的成员函数来更直观地操作字符串,同时很多有用的方法与C++容器都有相同的接口string类是basic_string类模板的一个实例,在中定义如下:typedef basic_string s原创 2012-10-08 23:32:15 · 794 阅读 · 0 评论 -
Chapter 14.关联容器set
set简介set是存储唯一元素的一类关联容器,元素就是key关联容器是通过key有效的访问元素而特别设计的,不像顺序容器,顺序容器是通过相邻或者绝对位置来更有效的访问元素在内部,set里的元素总是以从低到高的一个特定的严格的弱序标准排序set是以一棵典型的二叉搜索树来实现的set的特点1.唯一的元素值,在同一个set里面不可能出现两个元素相同2.元素值就是key,以ke原创 2012-10-10 21:20:24 · 625 阅读 · 0 评论 -
Chapter 9.容器适配器stack、queue、priority_queue
容器适配器简单的讲就是在已有的顺序容器上面实现的接口,可以方便的使原有的顺序容器有一个新的数据结构适配器没有提供迭代器,也不能同时插入或删除多个元素简介stack 栈(LIFO类似叠放在一起的盘子的取出和放入)queue 队列(FIFO类似小朋友排队进动物园)priority_queue 优先队列(最大堆heap)构造函数stack原创 2012-09-13 23:45:12 · 1581 阅读 · 0 评论 -
Chapter 15.关联容器map
map简介map是一个关联容器,map中的每一个值是一个由key value和一个mapped value组成的,通过key value来索引mapped value,以便有效的访问mapped value在内部,map里的元素总是以从低到高的一个特定的严格的弱序标准排序map的特点1.在同一个map中key value是唯一的2.元素值由key value和mapped va原创 2012-10-10 21:43:02 · 860 阅读 · 0 评论 -
Chapter 16.关联容器multiset
multiset简介multiset与set类似,但是其允许相同的值,应用举例:比如求某个范围内的最大最小值(值可以重复)与set的区别在于,insert()一定会插入值;erase(element_value)会删除所有相同元素值的元素multiset模板template , class Allocator = allocator > class mult原创 2012-11-06 21:58:31 · 646 阅读 · 0 评论 -
Chapter 17.关联容器multimap
multimap简介与map类似,但是允许不同的mapped_value拥有相同的key_value,实际应用,一个人拥有多个QQ、邮箱、电话号码等与map的区别在于,insert()一定会插入值;erase(element_value)即version 1,会删除所有相同元素值的元素multimap模板template , class Allocator原创 2012-11-06 22:09:22 · 566 阅读 · 0 评论 -
Chapter 23.复制控制
复制控制复制控制包括复制/拷贝构造函数、赋值操作符、析构函数1.复制/拷贝构造函数(copy constructor) - 控制复制接受单个本类类型对象的引用形参(常用const修饰)作用:1.根据另一个同类型的对象显式或隐式初始化一个对象//使用的是copy-initialization → =eg:string nullBook="9-999-99999-9"/str原创 2012-12-01 15:58:43 · 870 阅读 · 0 评论 -
Chapter 1.main函数
下面让我们一起进入C++的世界! 首先先花点时间复习下C++语言基础部分,然后进入: 标准IO库、标准库(容器、算法、迭代器)、类和数据抽象、面向对象编程、模板与泛型编程、异常处理、命名空间、多重继承与虚继承、优化内存分配、运行时类型识别。 此系列文章只是作为笔记mark一下,不喜勿喷。 //ISO IEC 14882-2011.pdfInformati原创 2012-08-10 19:34:41 · 666 阅读 · 0 评论