ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:30.15KB ,
资源ID:8594445      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8594445.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++ primer读书笔记.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C++ primer读书笔记.docx

1、C+ primer读书笔记1. 每个C+程序必须含有main函数,而且main函数是唯一被操作系统显示调用的函数。2.std:coutEnter two numbers:;std:coutstd:endl;endl是一个特殊值,称为操作符(manipulator),将它写入输出流时,具有输出换行 的效果,并刷新与设备相关联的缓冲区(buffer);忘记刷新输出流可能会造成输出停留在缓冲区中,如果程序崩溃,会导致对程序崩溃位置的错误推断。3.C+程序中大部分出现的空格符的地方可以用换行符代替。两个例外是:1、字符串字面值中的空格符不能用换行符代替2、空格符不允许出现在预处理指示中4.定义变量时,

2、应该给变量赋初始值5.太多的注释混入代码可能会使代码难以理解,通常最好是把一个注释块放在所注释的代码的上方6.自定义头文件用双引号(“”)把头文件括起来(通常在源文件所在路径),标准库的头文件用括起来(在系统路径环境中查找)7.8位块一个字节,32位块四个字节作为一个字8.超出取值范围的赋值将会被采取取模操作9.0开头的字面值整数表示八进制,0x开头的整数表示十六进制10.定义长整形的时候,应该使用大写字母L,表示扩展精度,避免小写的l与1混淆123u /*unsigned*/123L /*long*/11.a之前加上L,可以得到wchar_t类型的宽字符字面值 La12.在一行末尾加可以将此

3、行与下行作同一行处理,但是后面不能加注释或空格13.命名习惯最重要的是保持一致14.复制初始化 int ival = 1024;直接初始化 int ival(1024); /更加灵活且效率更高初始化不是赋值,赋值是擦除原来的数值15.计数器初始化string变量std:string all_nines(10,9);得到的值是999999999916.const变量定义后就不能修改,所以必须初始化17.extern const int bufsize = 1024对const变量指定extern可以让整个程序中访问const对象18.引用对象的另一个名字int ival = 1024;int &

4、refval = ival; /对引用对象复制必须用与该引用同类型的对象初始化,而且必须在定义引用对象的时候对其初始化赋值可以读取但不能修改引用的对象19.枚举类型enum open_modes input, output, append = 1 , another;第一个枚举成员赋值为0,第二个是1,第三个是1,第四个是220.类定义后面要加分号21.默认情况下struct成员为public,class成员是private22.预处理可以防止头文件被反复引用#ifndef SALESITME_H#define SALESITME_H#endif23.使用命名空间using std:cin;u

5、sing std:cout;using std:string;24.任何储存string的size操作结果的变量必须是string:size_type类型,不要把size的返回值赋值给int变量for(string:size_type index = 0; index != s.size(); +index)25.任何一个大写字母都小于任何一个小写字母26.对字符串进行混合连接操作时,+操作符的作用操作数必须至少有一个是string类型的错误的连接:string s1 = hello + , ;string s2 = hello + 11 +s1;27.C标准库的文件命名name.h形式在C+

6、中为cname.h28.C+程序员优先选用!=而不是来编写循环判断条件29.vector可以使用下标操作,但是下标必须是已经初始化的元素才错误的尝试使用下标对vector进行添加操作方法:vector ivec;for (vector:size_type ix = 0; ix != 10; +ix)ivecix = ix; /错误,ivec没有元素初始化vector的添加元素for (vector:size_type ix = 0; ix != 10; +ix)ivec.push_back(ix);30.所有的标准库容器都定义了相应的迭代器类型,只有少数容器支持下标操作vector:itera

7、tor iter;31.每种容器定义都定义了一对命名为begin和end的函数32.迭代器使用示例:for (vector:iterator iter = iver.begin();iter != ivec.end(); +iter) /end操作返回的迭代器不指向vector中任何实际元素*iter = 0; /解引用操作符*,访问迭代器指向的元素33.声明一个const迭代器的时候,必须初始化迭代器34.二进制位集处理标准库bitset,在定义bitset时要明确bitset含有多少位bitset bitvec;长度值必须是整型值常量或者是已用常量值初始化的整形的const对象35.用st

8、ring对象初始化bitset对象时,string对象直接表示为位模式。从string对象读入位集的顺序是从右到左string strval(1100);bitset bitvec4(strval);bitvec4位模式中第2和第3的位置为1,第0和第1位置为0。string 和 bitset对象之间是反向转化的36.数组一经创建,就不允许添加新的元素。指针则可以像迭代器一样用于遍历和检查数组中的元素37.C+应尽量使用vector和迭代器类型,而避免使用低级的数组和指针38.非const变量和要到运行阶段才能知道其值的const变量都不能用于定义数组的维数const unsigned sz

9、= get_size();39.char ca = C,+,+,0;使用一组数组字面值初始化字符数组时,要注意添加结束字符串的空字符const char ca6 = Daniel; /错误,应该7个字符元素,一个用于存放空字符null40.vector使用vector:size_type作为下标的类型,而数组下标类型是size_t41.指针的两种定义方法string *p;string* p;42.string* p1, p2; /只有p1是指针,p2是string对象43.void*指针可以保存任何类型对象的地址44.在表达式中使用数组名时,该名字会自动转换为指向数组第一个元素的指针45.C

10、+强制要求指向const对象的指针也必须具有const特性const double *cptr ;46.使用标准库函数strncat和strncpy比strcat和strcpy函数更安全47.在复制和串联字符串时,要注意算上结束符null48.标准库函数strlen返回的是字符串的长度,并不包括字符串结束符,在获得字符串长度上必须加1以便知动态分配时预留结束符的存储空间49.在要求C风格字符串的地方不可直接使用标准库string类型对象char *str = st2.c_str();50.一元操作符的优先级最高51.string s(Expressions in C+ are composed

11、.);string : iterator it = s.begin();while(it != s.end() & !isspace(*it) *it = toupper(*it);+it;52.if(ijk)该条件将k和0或者1比较53.位操作符最好使用unsigned整型操作数54.移位操作的右操作数必须是正数而且必须严格小于左操作数位数的值55.位异或,两个位之间不同,则为1,相同为056.移位操作符比关系操作符、赋值操作符、条件操作符高cout(10 s)这里隐式使用了IO标准库定义的类型转换62.强制将dval类型转换成int类型ival *= static_cast(dval);6

12、3.空语句常见于循环条件判断阶段就能完成全部循环工作的情况使用是最好加上注释,以便使任何读这段代码的人都知道该语句是有意省略的64.在while或者if条件后面额外添加分号,往往会彻底改变程序员的意图65.block(块)标识了一个作用域66.if和else匹配时,可以使用花括号指定匹配67.switch语句中两个case具有相同的数值,会导致编译错误68.for语句的init-statement中可以定义多个对象,但只能出现一个语句,而且必须具有相同的类型69.break只能出现在swich语句中70.string inbuf;while (cin inbuf & !inbuf.empty(

13、) if (inbuf0 != _)continue;/只有下划线开头的单词才做处理71.使用NDEBUG预处理变量实现有条件调试代码int main()#ifndef NDEBUGceer starting main endl;#endifNDEBUG定义了,自动跳过72.if (word.size() threshold)cerr Error _ _FILE_ _ /文件名 :line _ _LINE_ _ endl /当前行号 compiled on _ _DATE_ _ /文件被编译的日期 at _ _ TIME _ _ endl; /文件被编译的时间73.void fcn(const

14、 int i) void fcn(int i) 发生错误,在C语言中,具有const形参或非const形参的函数并无区别74.将实参定义为引用类型void swap (int &v1, int &v2)int tmp = v2;v2 = v1;v1 = tmp;参数值在函数内产生的修改可以被传到函数外75.非const引用形参只能与完全同类型的非const对象关联76.应该将不需要修改的引用形参定义为const引用.编译器检查数组形参关联的实参时,只会检查实参是不是指针、指针类型和数组类型是否匹配,不会检查数组长度77.f( int &arr10)f( int (&arr)10)&arr两边的

15、括号是必须的,因为下表操作符具有更高的优先级78.多维数组编译时编译器忽略第一维的长度79.确保函数的操作不超过数组实参的边界的方法:1:数组本身放置一个标记来检测数组的结束。C语言2:传递指向数组第一个和最后一个元素的下一个位置的指针。3:将第二个形参定义为数组的大小80.只允许主函数main没有返回值就结束81.在含有return语句的循环后没有提供return语句是很危险的82.千万不要返回局部对象的引用函数执行完毕是,将释放分配给局部对象的存储空间,此时对局部对象的引用将会指向不确定内存83.一个函数只能定义一次,但可以声明多次84.主函数不能调用自身85.如果提供了实参,将覆盖默认的

16、实参值sring scr(string:size_type height = 24, string:size_type width = 80, char background = );string screen;screen = scr();/默认实参 24 80 screen = scr(66);/60 默认实参 80 screen = scr(66,256);/66 256 默认实参 screen = scr(66,256,#);/66 256 #尽量使最少使用默认实参的形参排在最前,最可能使用默认实参的形参排最后86.形参也是自动对象,只有在函数被调用的时候才会存在的对象是自动对象87.

17、static对象一旦被创建,在程序结束前都不会被撤销88.使用内联函数inline const string shorterString(const string &s1, const string &s2)retuen s1.size() s2.size() ? s1 : s2;cout shorterString( s1,s2) endl;相当于cout (s1.size() s2.size() ? s1 : s2) word)108.IO的条件状态bad,fail,eof,good操作提示109.流状态的查询和控制int ival;While(cinival,!cin.eof()/直到读

18、到文件结束符为止,注意这里while有两个参数 If(cin.bad()/检查流是否已经被破坏 Throw.runtime_error(IO stream corrupted!); If(cin.fail()/如果输入无效,输出警告并且清除failbit状态 Cerrbad data,try again; Cin.clear(istream:failbit); Continue; 110.多种状态管理Is.setstate(ifstream:badbit | ifstream:failbit);111.输出缓冲区的刷新的方法Couthi!flush;/刷新流,但不在输出中添加任何字符Couth

19、i!ends;/在缓冲区中插入字符null然后刷新Couthi!endl;/输出一个换行符并刷新缓冲区112.Unitbuf操作符刷新所有输出,在每次执行完写操作后都刷新流Coutunitbuffirstsecondnounitbuf;相当于 coutfirstflushsecondflush;113.如果仅仅因为缓冲区没有刷新,很容易浪费很多时间进行调试,所以要经常使用endl而非n114.使用c_str成员获取C风格字符串,调用open或使用文件名作为初始化式时,需要传递的实参为C风格字符串,比较好的方法是把文件名读入string对象Ifstream input;Vector:const_

20、iterator it = files.begin();While(it != file.end() Input.open(it-c_str()/打开文件,注意这里要打开为string对象,用c_str()成员 If(!input) Break; While(input s) Process(s); Input.close(); Input.clear(); +it; 115.重新捆绑文件时,必须先关闭现在的文件Ifstream infile(in);/打开文件名为in的文件读取Infile.close();/必须先关闭后再读取第二个文件Infile.open(next);/打开文件名为nex

21、t的文件读取116.如果需要重用文件流读写多个文件,需要在读另一个文件前调用clear清除该流的状态117.顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定118.顺序容器类型:vector (支持快速随机访问)list(支持快速插入删除) deque(双端队列)顺序容器适配器 stack(后进先出) queue(先进先出) priority_queue(有优先级管理的队列)119.使用顺序容器需要使用的头文件#include #include #include 120.容器的声明方法 容器类型加容器中元素类型 vector svec;List ilist;121.将一个容

22、器复制给另一个容器时,类型必须匹配,容器类型和元素类型都必须相同但使用迭代器的时候,不要求容器类型相同,元素类型也可以不相同,只要他们相互兼容122.初始化指定数目的元素Const list:size_type list_size = 64;List slist(list_size,eh?);/list容器中初始化为64个eh?的字符串接受容器大小做形参的构造函数只适用于顺序容器123.容器元素类型的约束:1必须支持赋值运(引用不支持一般意义上的赋值运算) 2元素类型的对象必须支持复制 (IO库类型不支持赋值或复制运算)124.外加的数据类型需要提供大小并提供单个初始化式的构造函数,假设Foo

23、类型没有构造函数,但提供了一个int类型形参的构造函数Vector empty;/声明成功,不指定容器大小和容器内元素Vector bad(10);/没有构造函数不能仅指定容器大小进行声明Vector ok(10,1);/由于有int形参的构造函数,所以声明成功125.必须用空格隔开相邻的符号,否则会被系统认为是操作符Vectorvector lines;Vectorvector lines;/错误 系统认为是位操作符126.只有vector 和 deque容器提供迭代器算术运算和用= 和!=以外的关系操作符比较容器关系操作符仅仅适合vector和deque容器这两种容器都支持元素位置的随机访

24、问,因此可以有效实现算术和关系运算Vector:iterator iter = vec.begin() + vec.size()/2;/取中值127.begin()返回迭代器的第一个元素,End()迭代器指向的是最后一个元素的下一个位置 元素表示范围为first,last)128.first和last不相等的时候 迭代器范围内至少有一个元素,相等时,迭代器为空rbegin()返回一个逆序迭代器,指向最后一个元素,rend()返回一个逆序迭代器,指向第一个元素前面的位置129.所有容器都支持c.push_back(t)操作,在容器尾部插入一个元素,c.push_front(t)只适用于list和

25、deque容器,在前段添加元素,c.insert(p,t)适用于p前插入值为t的新元素,c.insert(p,t)在p指向的元素前插入值为t的新元素,c.insert(p,n,t)在p指向的元素前插入n个值为t的元素,p指向的元素钱插入迭代器b和e标记的范围内的元素130.使用一段新元素初始化容器时,新容器存放的是原始元素的副本131.不要存储end操作返回的迭代器,添加或删除deque或vector容器内的元素都会导致存储的迭代器失效132.容器的比较,如果两个容器都不是对方的子列,比较的结果取决于所比较的第一个不相等的元素133.C+语言只允许两个容器做元素类型定义的关系运算134.容器大小操作c.size()返回容器内元素个数,c.max_size()返回容器容量,c.empty()判断容器是否为空,c.resize(n)增加容器n个大小135,c.front()和c.back()返回第一个和最后一个成员,cn/c.atn返回下标为n的元

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1