2022年《CPrimer》全书第一轮学习笔记汇总_第1页
2022年《CPrimer》全书第一轮学习笔记汇总_第2页
2022年《CPrimer》全书第一轮学习笔记汇总_第3页
2022年《CPrimer》全书第一轮学习笔记汇总_第4页
2022年《CPrimer》全书第一轮学习笔记汇总_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选学习资料 - - - 欢迎下载学习必备欢迎下载c+ primer全书第一轮学习笔记汇总2021.10.02c+ primer整书学习笔记前言第 00 章:前言此次打算了写c+ primer的学习笔记,刚开头时没有想到怎么个写法,为学完一章后直接写章结仍为怎样,不知道,后来,在学习的时候,发觉,有很多细节仍为很有用的,不想忘了它们,而之前我又学过 c+ primer plus,也有一些内容已经熟记在心里了,所以,现在打算了写这个学习笔记的模式,方法, 框架为怎样了;第一,我会整章阅读一次,在认为对自己很有帮忙,或者为之前仍没有接触过的学问点做上记号;然后,这一章终止后,有时我会将其先写到草稿

2、本上;之后,我会将其录入电脑,在录入的时候顺带再强化记忆,然后,假如有些有地方有想说的话的时候,会在后面加一个“摘录有想”说出自己想说的东西,不过有时候太累赘的话就不说了;我会常常反复阅读自己的笔记,当然,知道最主要的为上机实践,不懂的时候再返回书本中的内容去看,去练;有人说,这本书你可以直接当作字典去查,不用这样一章章地看下去,但为,我想的为,假如连字典中有些什么内容也不知道,提到过的一些学问点不知道的话,需要用到的时候一点反应都没有,怎么往这里去查呢?所以,我仍为打算,将这本书看一遍,有些地方细看,有些地方粗看,那么等真正需要用的时候,就可以很快地想出曾经有这么一个东西可以用,曾经书上有提

3、过这么一个东西了;我从08 月 21 日开头看了这本书,但为那时仍没有开头想到要做笔记,由于可怕看了书后也会没看过一样,吸取不到什么,不知道自己看过什么,所以,我打算了做笔记;之前一段时间,始终有不少的琐事 做着,让我不得连续在这个阵线上学习;现在,事情很大部分已经解决了,除了每天的上课课程这些学习 类的东西干扰这个任务外,基它就基本没有什么了,所以,我接下来,会在兼顾现在的学校的专业课教学内容的同时,做完这本 c+ primer的学习笔记,现在已经为 2021 年 09 月 07 日了,大二了,方案 2021年 10 月 15 日前,将此任务完成;当然,会做好方案往往赶不上变化的预备;那时就

4、,详细问题详细分析;嗯,加油!c+ primer第一部分学习笔记汇总基本语言c+ primer 第 1 章学习笔记第 01 章:快速入门这一章,书上用了一个例子贯穿每部分的内容,“书店的书本销售情形”(包括销售册数与单价);其次节:介绍输入与输出 学习摘录001: endl 称为操纵符 manipulator、 可刷新与设备相关联的缓冲区;在刷新缓冲区时,用户可立刻看到写入到流中的输出;程序员常常在调试过程中插入输出语句,这些语句都应刷新输出流;摘录有想 001:这几句让我想起之前自己以及伴侣们显现过的错误,当if.cin 时,只为cin.clear为不够的,仍需要用cin.sync清空缓冲区

5、或者用whilecin.get .= ncontinue; 提取余外字符; 看来以后得多留意输入输出缓冲区了;第三节:关于注释精品学习资料精选学习资料 - - - 欢迎下载学习必备欢迎下载 学习摘录002:当注释多行时,最好能直观指明每一行都为注释;摘录有想 002:这让我留意到了之前没怎么留意的问题,看数据结构与算法分析的一书上为用了这样的格式的,才发觉原先那书的编译习惯为不错的;/* now、 for a example.* like this.*/第四节:掌握结构 学习摘录003:关于掌握结构我想到的为之前c+ primer plus上提到过,循环(判定条件),条件 if 判定条件 都会

6、将括号内的内容转换为bool 型作为执行与否的依据的; 学习摘录004:编译器能查出的最一般的错误1.语法错误2.类型错误3.声明错误摘录有想 004:知道编译能检查出错误的话,在编译习惯上有些就可以利用这一点了,可以防止在调试的时候才发觉错误了,这也为一个网友跟我说过起的;如:ifi = 1、 将其写为if 1 = i 的话就能在编译时检测出自己要写的为 if 1 = i了;第五节:类的简介 学习摘录005:什么为成员函数:成员函数为由类定义的函数,有时称为“类方法”( method ) 学习摘录006:使用类时需留意的三个问题: 1. 类的名字为什么?2. 它在哪里定义?3. 它支持什么操

7、作?摘录有想 006:很多同学不明确的一点为第点,之前我看同学的程序时,问同学你的这个类想要实行什么样的功能时,他自己也答不上;c+ primer 第 02 章学习笔记第 02 章:变量和基本类型这一章,主要叙述了常量,变量和一些类型的使用方法,留意事项;第三节:变量 学习摘录007: c+为一门静态类型语言,在编译的时候会作类型检查,静态类型检查能帮忙我们更早地发觉错误;精品学习资料精选学习资料 - - - 欢迎下载学习必备欢迎下载摘录有想 007:静态类型使得编译器必需能识别程序中每个实体的类型;假如没有定义或定义错的时候就能检查出来啦; 学习摘录008:左值: lvalue,左值可以显现

8、在赋值语句的左边或右边;右值: rvalue ,右值只能显现在赋值的右边,不能显现在赋值语句的左边;变量为左值,因此可以显现在赋值语句的左边,数字字面为右值,因此不能被赋值;摘录有想 008:在我懂得中,由于变量可在左也可在右,因此它为左值,而数字就只能显现在右边,因此它为右值; 学习摘录009:变量供应了可以操作的出名字的储备区,对象就为内存中具有类型的区域;摘录有想 009:例如: int a; class b; b c; 这里, a 和 c 属于对象; 学习摘录010:初始化变量不为赋值;初始化:指创建变量并给它赋初始值;赋值:为擦除对象的当前值并用新值代替; 学习摘录011:初始化变量

9、有两种形式; 1. int ival1024;/ direct-initialization直接初始化 2.int ival = 1024;/ copy-initialization复制初始化 学习摘录012:复制初始化和直接初始化之间的差别为很微妙的;现在我们只需知道,直接初始化的效率更高; 学习摘录013:未初始化变量引起的错误难以发觉,永久不要依靠未定义行为,使用未初始化的变量为常见的程序错误;虽然很多编译器都至少会提示不要使用未初始化变量,但为编译器并未被要求去检测未初始化变量的使用;而且,没有一个编译器能检测出全部未初始化变量的使用; 学习摘录014: extern 声明不为定义,也

10、不安排储备空间;事实上,它只为说明变量定义在程序的其他地方;摘录有想 014: extern 的使用得留意, 一个文件里面放定义,另外一个文件里面放声明才可以,上次同学就为犯了这样的错误,没有在另一个文件中声明就想用extern 变量了; 学习摘录015:只有当声明也为定义时,声明才可以有初始化式,因此只有定义才安排储备空间;精品学习资料精选学习资料 - - - 欢迎下载学习必备欢迎下载 学习摘录015:看来下次写程序时真的要直接在声明的时候就定义好,那样的话就安全多了; 学习摘录016:作用域可以分为三种: .全局作用域(global scope) .局部作用域(local scope) .

11、语句作用域(statement scope )摘录有想 016:有语句forint val = 1; val <= 10; +val sum += val;此处, val 定义在 for 语句的作用域中,只能在for 语句中使用,而不能在main 函数的其他地方; 学习摘录017:通常把一个对象定义在它首次使用的地方为一个很好的方法;放置声明的一个约束为,变量只在从其定义处开头到声明所在的作用域的终止才可以拜访;第五节:引用 学习摘录018:“ const 引用”的意思为“指向const 对象的引用” ; 学习摘录019:非 const 引用只能绑定到与该引用同类型的对象; const

12、引用就可以绑定到不同但相关的类型对象或绑定到右值;第八节:类类型 学习摘录020:每类都定义了一个接口(interfer )和一个实现;接口由使用该类的代码需要执行的操作实组成;实现一般包括该类所需要的数据;类体定义了组成该类型的数据和操作;操作称为成员函数,数据就称为数据成员; 学习摘录021:用 class 和 sturct 关键定义类的唯独差别在于默认拜访级别:默认情形下, struct 的成员为 pulbic ,而 class的成员为private. 学习摘录022:当我们在头文件中定义了const 变量后,每个包含该头文件的源文件都有了自己的const 变量,其名称和值一样; 学习摘

13、录023:防止多重包含,为了防止多重包含,防止名字冲突,预处理器变量常常用全大写字母表示;#ifndef abc_h精品学习资料精选学习资料 - - - 欢迎下载学习必备欢迎下载#define abc_h / definition of abc class and related functions goes here#endif摘录有想 023:看了这么多书,这么多个例子,最终知道为什么它总为用大写来表示了;c+ primer 第 03 章学习笔记第 03 章:标准库类型c+仍定义了一个内容丰富的抽象数据类型标准库,其中最重要的标准库类型为string 和 vector ,它们分别定义了大小

14、可变的字符串和集合;另一种标准库类型bitset 供应了一种抽象方法来操作位集合;第一节:命名空间using 声明 学习摘录024:一旦使用了using 声明,我们就可以直接引用名字,而不需要再引用该名字的命名空间: / using declaration states our intent to use these names from the namespace std. using std:cin; using std:string; 学习摘录025:假如在头文件中放置using 声明,就相当于在包含该文件的每个程序中都放置了同一个using 声明,不论该程序为否需要using 声明;摘

15、录有想 025:我想这相当于全局变量跟局部变量的作用吧; 学习摘录026:通常头文件中应当只定义的确必要的东西;请养成这个习惯;摘录有想 026:书上建议少用using namespace std 这样的风格,以后写程序就尽量用using 声明吧,少用using 编译指令;其次节:标准库string 类型 学习摘录027: string 操作 s.empty /检查字符为否为空,bool 类型 s.size; /返回 s 中字符的个数 sn;/返回 s 中位置为n 的字符,位置从0 开头计数摘录有想 027:以前仍不知道原先有empty 这一操作,初见empty 仍以为要清空这个对象的数据呢,

16、其实不然,为检查字符串为否为空;ifs.empty / ok、 empty 学习摘录028: size 操作返回的为string:size_type类型的值; string 类类型和很多其他库类型都定义了一些配套类型 companion type ;通过这些配套类型,库类型的使用就能与机器无关machine-independent ;size_type 就为这些配套类型中的一种;它定义为unsigned 型( unsigned int或 unsigned long )具有相同的含义,而且可以精品学习资料精选学习资料 - - - 欢迎下载学习必备欢迎下载保证足够大能够储备任意string 对象的

17、长度;摘录有想 028:写程序时不要把size 的返回值赋给一个int 变量了; 学习摘录029:如在有16 位 int 型的机器上,int 类型变量最大只能表示32767 个字符的string 对象,而能容纳一个文件内容的string 对象轻易就会超过这个数字;因此,为了防止溢出,储存一个string 对象 size 的最安全的方法就为使用标准库类型string:size_type 学习摘录030: string 对象比较操作为区分大小写的,即同一个字符的大小写形式被认为为两个不同的字符;在多数运算机上,大写的字母位于小写字母之前;任何一个大写字母都小于任意的小写字母;摘录有想 030:在比

18、较时需留意大小写了,想起以前cctype 有一个用于转换字符的函数,把大写转为小写之类的功能可以很简洁实现; 学习摘录031: string 类型通过下标操作符( )来拜访string 对象中的单个字符;下标操作符需要一个size_type 类型的值,来标明要拜访字符的位置;这个下标中的值通常被称为“下标”或“索引(index)”; 学习摘录032: string 对象的下标从0 开头,而ss.size1就表示 s 的最终一个字符;第三节:标准库vector 类型 学习摘录033:虽然可以对给定元素个数的vector 对象预先安排内存, 但更有效的方法为先初始化一个空vector 对象,然后再

19、动态地增加元素; 学习摘录034: c+程序员习惯于优先选用.=而不为 <来编写循环判定条件; 学习摘录035:我们倾向于在每次循环中测试size 的当前值,而不为进入循环前,储备size 值的副本;调用size 成员而不储存它返回的值,这反映了一种良好的编程习惯;摘录有想 035:以后在使用for 时,可以留意一下这个问题了;第四节:迭代器简介; 学习摘录036:迭代器为一种检查容器内元素并遍历元素的数据类型;如一种类型支持一组确定的操作(这些操作可用来遍历容器内的元素并拜访这些元素的值),我们就称这种类型为迭代器;精品学习资料精选学习资料 - - - 欢迎下载学习必备欢迎下载 学习摘

20、录037: vector<int>:iterator iter = ivec.begin;由 end 操作返回的迭代器指向vector 的“末端元素的下一个”,通常称为超出未端迭代器(off-the-end iterator ),说明它指向了一个不存在的元素;假如 vector 为空,begin 返回迭代器与end 返回的迭代器相同; 学习摘录038:由 end 操作返回的迭代器并不指向vector 中任何实际的元素,相反,它只为起一个哨兵(sentinel)的 作用,表示我们已经处理完vector 中全部的元素; 学习摘录039:迭代器类型可以使用解引用操作符(* 操作符)来拜访

21、迭代器所指向的元素:*iter= 0;由于 end 返回的迭代器不指向任何元素,因此不能对它进行解引用或自增操作; 学习摘录040:使用const_iterator类型时,我们可以得到一个迭代器,它自身的值可以转变,但不能用来转变其指向的元素的值;可以对迭代器进行自增以及使用引用操作符来读取值,但不能对该元素值赋值;c+ primer 第 04 章学习笔记第 04 章:数组和指针其次节:指针的引入 学习摘录041:指针的概念很简洁,指针用于指向对象;与迭代器一样,指针供应对其所指对象的间接拜访,只为指针结构更通用一些;与迭代器不同的为,指针用于指向单个对象,而迭代器只能用于拜访容器内的元素;

22、学习摘录042:假如可能的话,除非所指向的对象已经存在,否就不要先定义指针,这样可防止定义一个未初始化的指针,假如必需分开定义指针和其所指针的对象,就将指针初始化为0,由于编译器可检测出0 值的指针,程序可判定该指针并未指向一个对象;摘录有想 042:我想这也就为说,定义指针最好有初始化,防止不必要的错误; 学习摘录043:预处理器变量不为在std 命名空间中定义的,因此其名字应为null,而非 std:null; 学习摘录044: c+供应了一个特殊的指针类型void* ,它可以储存任何类型对象的地址; void* 主要用于以下三种操作: 1. 与另一个指针进行比较 2. 向函数传递void

23、* 指针或从函数返回void* 指针 3. 给另一个void* 指针赋值精品学习资料精选学习资料 - - - 欢迎下载学习必备欢迎下载double obj = 3.14; double *pd = &obj;/ ok、 void * can hold the address value of any data pointer type void * pv = & obj;/ obj can be an object of anytypepv = pd;/ pd can be a pointer to any type 学习摘录045:指针与引用的区分指针与引用的相同点:都可间接

24、拜访另一个值第一区分:引用总指向某个对象,定义引用时设有初始化为错误的;其次区分:赋值行为的差异:给引用赋值修改的为该引用所关联的对象的值,而不使引用与别一个对象关联; 学习摘录046: c+答应运算数组或对象的超出未端的地址,但不答应对此进行解引用操作(* 解引用操作) ,而运算数组超出未端位置之后或数组首地址之前的地址都为不合法的;第三节: c 风格字符串 学习摘录047: c 风格字符串与c+的标准库类型string 的比较以下两段程序反映了使用c风格字符串与c+的标准库类型string 的不同之处,使用string 类型的版本更短.更简洁懂得,而且出错的可能性更小;/ c-style

25、character string implementationconst char * pc =“ a very long literal string.”;const size_t len = strlenpc;/ space to allocate/ performance test on string allocation and copy for size_t ix = 0; ix .= 1000000; +ixchar * pc2 = new charlen + 1;/ allocate the space strcpypc2、 pc;/ do the copyifstrcmppc2

26、、 pc/ user the new string;/ do nothingdelete pc2;/ free memory/ string implementationstring str“ a very long literal string” ;/ performance test on string allocation and copy forsize_t ix = 0; ix .= 1000000; +ixstring str2 = str; / do the copy、 automatically allocated ifstr .= str2; / do nothing/ st

27、r2 is automatically freed精品学习资料精选学习资料 - - - 欢迎下载学习必备欢迎下载第四节:多维数组 学习摘录048:严格来说,c+中没有多维数组,通常所指的多维数组的数组;/ array of size 3、 each element is an array of ints of size 4 int ia34;在使用多维数组时,记住这一点有利于懂得其应用;术语: 学习摘录049: ptrdiff_t :在 cstddef 头文件中定义的与机器相关的有符号整型,该类型具有足够大小储备两个指针的差值,这两个指针指向同一个可能的最大数组; size_t:在 cstdd

28、ef 头文件中定义的与机器相关的无符号整型,它具有足够大小储备一个可能的最大数组;c+ primer 第 05 章学习笔记第 05 章:表达式第五节:自增和自减操作符 学习摘录050:自增和自减操作符建议:只有在必要时才使用后置操作符;前置操作需要做的工作更少,只需加1 后返回加1 后的结果即可;而后置操作符就必需先储存操作数原先的值,以便返回未加1 之前的值作为操作的结果;对于int 型对象和指针,编译器可优化掉这项额外工作;但为对于更多的复杂迭代器类型,这种额外工作可能花费更大的代价;养成使用前置操作这个好习惯,就不必操劳性能差异的问题; 学习摘录051:在单个表达式中组合使用解引用和自增

29、操作 *iter+ 的意思:等效于*iter+ ;子表达式iter+ 使 iter 加 1,然后返回iter 原值的副本作为该表达式的结果;vector<int>:iterator iter = ivec.begin;/ prints 10 9 81whileiter .= ivec.endcout << *iter+ << endl;/ iterator postfix increment摘录有想:很多c+程序员都会习惯用这种方法的,可以简洁清晰不冗长; 第十一节: new 和 delete表达式 学习摘录052:动态创建对象的默认初始化在动态创建对象时,

30、(几乎)总为对它做初始化也为一个好方法;同样也可以对动态创建的对象做值初始化精品学习资料精选学习资料 - - - 欢迎下载学习必备欢迎下载string *ps = new string;/ initialized to empty stringint *pi = new int;/ pi points to an int value-initialized to 0cls *pc = new cls;/ pc points to a value-initialized object of type cls对比下面的不同初始化方式的不同int *pi = new int;/ pi points

31、to an uninitialized intint *pi = new int;/ pi points to an int value-initialized to 0 学习摘录053:一旦删除了指针所指向的对象,立刻将指针置为0,这样就特别清晰地说明指针不再指向任何对象;摘录有想:假如用了delete *p;之后p = null;第十二节:显式转换 学习摘录054:命名的强制类型转换cast-name<type>expression; dynamic_cast,支持运行时识别指针或引用指向的对象; const_cast,将转换掉表达式的const 性质; static_cast

32、,编译器隐式执行的任何类型转换都可以由static_cast 显式完成; reinterpret_cast ,通常为操作数的位模式供应较低层次的重新说明;摘录有想:我想一般现在写程序的时候用到最多的为static_cast 吧,而且,书上也建议,不要常用强制转换,假如程序写得好的话,就根本不用用上这个功能;c+ primer 第 06 章学习笔记第 06 章:语句其次节:复合语句(块) 学习摘录055:复合语句( compound statement ),通常被称为块(block),为用一对花括号括起来的语句序列(也可能为空的);块标识了一个作用域,在块中引入的名字只能在该块内部或嵌套在块中的

33、子块里拜访;第十二节: goto 语句 学习摘录056:从上世纪60 岁月后期开头,不主见使用goto 语句, goto 语句使跟踪程序掌握流程变得很困难,并且使程序难以懂得,也难以修改;全部使用goto 的程序都可以改写为不用goto 语句,因此也就没有必要使用goto 语句了;精品学习资料精选学习资料 - - - 欢迎下载学习必备欢迎下载c+ primer 第 07 章学习笔记第 07 章:函数本章介绍(function )的定义和声明;其次节:参数传递 学习摘录057:数组形参性质数组形参有两个特殊的性质,影响我们定义和使用作用在数组上的函数; 1.不能复制数组 2.使用数名字时,数组名

34、会自动转化为指向其第一个元素的指针 学习摘录058:数组形参在函数中声明方法/ three equivalent definitions of printvalues void printvaluesint * /*/ void printvaluesint /*/ void printvaluesint10 /*/ 虽然不能直接传递数组,但为函数的形参可以写成数组的形式;虽然形参表示方式不同,但可将使用数组语法定义的形参看作指向数组元素类型的指针; 学习摘录059:通过引用传递数组和其它类型一样,数组形参可声明为数组的引用;编译器检查数组实参的大小与形参的大小为否匹配;这个版本的printv

35、alues 函数只严格地接受含有10 个 int 型数值的数组,这限制了哪些数组可以传递;然而,由于形参为引用,在函数体中依靠数组的大小为安全的;/ ok: parameter is a reference to an array; size of array is fixed void printvaluesint &arr10for size_t i = 0; i .= 10; +icout << arri << endl;第三节: return 语句 学习摘录060:主函数 main 的返回值答应主函数main 没有返回值就可终止,假如程序掌握执行到主函数

36、main 的最终一个语句都仍没有返回,那么编译器会隐式地return 0;这为返回类型不为void 的函数必需返回一个值的规章的例外情形;主函数main 返回的值视为状态指示器,返回0 表示程序运行胜利,其它大部分返回值就表示失败;第八节:重载函数 学习摘录061:精品学习资料精选学习资料 - - - 欢迎下载学习必备欢迎下载重载函数定义:显现在相同作用域中的两个函数,具有相同的名字而形参表不同的函数;c+ primer 第 08 章学习笔记第 08 章:标准io 库 c+的输入 / 输出( input/output)由标准库供应;标准库定义了一族类型,支持对文件和掌握窗口等设备的读写( io

37、);第一节:面对对象的标准库 学习摘录062: iostream 定义读写掌握窗口的类型 istream从流中读取 ostream写到流中去 iostream对流进行读写;从istream 和 ostream 派生而来 学习摘录063: fstream 定义读写已命名文件的类型 ifstream从文件中读取;由istream 派生而来 ofstream写入到文件中;由ostream 派生而来 fstream 读写文件;由iostream 派生而来 学习摘录064: sstream 定义的类型用于读写储备在内存中的string 对象 istringstream 从 string 对象中读取;由i

38、stream 派生而来 ostringstream 写入到 string 对象中去;由ostream 派生而来 stringstream 对 string 对象进行读写,由iostream 派生而来其次节:条件状态(condition state ) 学习摘录065: io 错误例子:以下例子,假如在标准输入设备输入borges;就 cin 在尝试将输入的字符串读为int 型数据失败后,会生成一个错误状态;假如输入文件终止符(end-of-file ) ;就 cin 也会进入错误状态;而假如输入1024,就胜利读取,cin 将处于正确的无错误状态;流必需处于无错误状态,才能用于输入或输出;检测

39、流为否可用的最简洁的方法为检查其真值;ifcin / ok to use cin、 it is in a valid statewhilecin >> word / ok: read operation successful 学习摘录066:各种条件状态的定义 s.bad, badbit 标志着系统级的故障,如无法复原的读写错误; s.fail, failbit 标志着显现可复原的错误,这种导致设置failbit 的问题通常为可以修正的; s.eof , eofbit 遇到文件终止符时设置的; s.good,假如 bad.fail 或者 eof 中的任意一个为true ,就检查流本

40、身将显示该流处于错误状态;假如精品学习资料精选学习资料 - - - 欢迎下载学习必备欢迎下载这三个条件没有一个为true ,就 good 操作将返回true ; s.clear, clear 操作将条件重设为有效状态; 学习摘录067:流状态的查询和掌握回忆逗号操作符的求解过程:第一运算它的每一个操作数,然后返回值右边的操作数作为整个操作的结果;int ival;/ read cin and test only for eof; loop is executed even if there are other io failures whilecin >> ival、 .cin.e

41、of if cin.bad/ input stream is corrupted; bail out throw runtime_error“io stream corrupted ”;if cin.fail/ bad inputcerr << “bad data、 try again ”; / warn the user cin.clearistream:failbit;/ reset the stream continue;/ get next input/ ok to process ival第三节:输出缓冲区的治理 学习摘录068:缓冲区的刷新下面五种情形将导致缓冲区的内容

42、被刷新,即写入到真实的输出设备或者文件: 1. 程序正常终止;作为main 返回工作的一部分,将清空全部的输出缓冲区; 2. 在一些不确定的时候,缓冲区可能已经满了,在这种情形下,缓冲区将会写到下一个值之前刷新; 3. 用操纵符( manipulator )显式地刷新缓冲区,例如行终止符endl. 4. 在每次输出操作执行完后,用unitbuf 操纵符设置流的内部状态,从而清空缓冲区; 5. 可将输出流与输入流关联(tie )起来;在这种情形下,在读输入流将刷新其关联的输出缓冲区; 学习摘录069: unitbuf 操纵符与flush 操纵符假如需要刷新全部输出,最好使用unitbuf 操纵符

43、; unitbuf 操纵符在每次执行完写操作后都刷新流: cout << unitbuf << “first ”<< “second”<< nounitbuf;等价于cout << “first ”<< flush << “second” << flush;第四节:文件的输入与输出 学习摘录070:读取一个存放文件名的容器,打开每个文件此例中,假如忽视clear 的调用,就循环只能读入第一个文件;ifstream input;vector<string>:const_iterator i

44、t = files. begin;/ for each file in the vector精品学习资料精选学习资料 - - - 欢迎下载学习必备欢迎下载while it .= files.end input.openit -> c_str;/ open the file/ if .inputbreak;/ error: bail out. whileinput >> s/ do the work on this fileprocesss;input.close; / close file when we re done with it input.clear;/ reset

45、 state to ok+it;/ increment iterator to get next file第五节:字符串流 学习摘录071:操纵每行中的每个单词的实例string line、 word;/ will hold a line and word from input、 respectively whilegetlinecin、 line/ read a line from the input into line/ do per-line processingistringstream streamline;/ bind to stream to the line we read w

46、hilestream >> word/ read a word from line/ do per-word processing使用getline 函数从输入读取整行内容;然后为了获得每行中的单词,将一个istringstream对象与所读取的行绑定起来,这样只需使用一般的string 输入操作符即可读出每行中的单词;c+ primer其次部分学习笔记汇总容器与算法c+ primer 第 09 章学习笔记第 09 章:容器与算法学习摘录072:次序容器将单一类型元素集合起来成为容器,然后依据位置来储备和拜访这些元素,这就为次序容器; vector支持快速随机拜访 list支持快速

47、插入 / 删除 deque双端队列学习摘录073:次序容器适配器适配器为依据原始的容器类型所供应的操作,通过定义新的操作接口,来适应基础的容器类型; stack后进先出( lifo)栈 queue先进先出( fifo)队列 priority_queue有优先级治理的队列精品学习资料精选学习资料 - - - 欢迎下载学习必备欢迎下载第一节:次序容器的定义(初始化)学习摘录074:新建一个容器初始化为另一个容器的副本 vector <int> ivec; vector<int> ivec2ivec;/ ok、 ivec is vector<int> list&l

48、t;int> ilistivec;/ error: ivec is not list<int> vector<double> dvecivec;/ error: ivec holds int now double将一个容器复制给另一个容器时,类型必需匹配:容器类型和元素类型都必需相同;摘录有想 074:这也就为说,容器复制的时候,只需考虑的为容器类型和元素类型,并不需要考虑原容器中的元素数量了,以前曾经想过这个问题;也会想一个问题,在定义新容器的时候,会不会显现溢出的情形呢?学习摘录075:初始化为一段元素的副本系统答应通过传递一对迭代器间接实现该功能;使用迭代器

49、时,不要求容器类型相同,容器内的元素类型也可以不相同,只要它们相互兼容能进行转换即可; / initialize slist with copy of each element of svec list<string> slistsvec.begin、 svec.end ; / find midpoint in the vector vector<string>:iterator mid = svec.begin + svec.size / 2; / initialize front with first half of svec: the elements up to

50、 but note include *mid deque<string> frontsvec.begin、 mid; / initialize back with second half of svec: the elements *mid through end of svec deque<string> backmid、 svec.end ;摘录有想 075:利用迭代器复制相当的便利,削减了很多限制,仍可以不同类型的复制,只为也要考虑到一个方面,稳固性,假如需要隐式转换的地方仍为少用的好;一段段的复制挺好的;同时,留意考虑它的区间为左闭右开的区间来的;学习摘录076

51、:容器内元素的类型约束元素类型必需支持赋值运算;元素类型的对象必需可复制;摘录有想 076:这个问题,虽然不常发生,int 型之类的内置类型不用考虑这个问题,而一些自己定义的类类型的话,真的得留意了;学习摘录077:容器的容器定义容器的容器时,有一个问题必需得留意的: vector< vector<string> > lines; / ok:space required between cblose> vector<vector<string>> lines; / error: >> treated as shift operator必需用空格隔开两个相邻的>符号,以示这为两个分开的符号;否就,系统会认为>>为单个符号,为右移操作符,并结果导致编译时的错误;摘录有想 077:网上的帖子看过很多人显现这个错,经典错误啊,就一个空格之差,让人看得纠结,写程序时,细节精品学习资料精选学习资料 - - - 欢迎下载学习必备欢迎下载打算成败;其次节:迭代器和迭代器范畴学习摘录078:迭代器范畴 c+语言使用一对迭代器标记迭代器范畴,这两个迭代器分别

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论