C++ Primer Plus
轻松的使用这种语言,不要觉得必须使用所有的特性,不要在第一次学习的时候就试图使用所有的特性
——Bjarne Stroustrup
非洲蜗牛
这个作者很懒,什么都没留下…
展开
-
C++ queue
queue是C++的一个模板类,queue模板让底层类(默认为deque)展示典型的队列接口。bool empty( ) const: 队列为空,则返回true,否则返回false。size_type size( ) const: 返回队列中元素的数目。void push(const T& x): 在队尾插入x。T& front( ): 返回指向队首元素的引用。T& back( ): 返回指向队尾元素的引用。void pop( ): 删除队首元素。转载 2024-03-26 18:55:53 · 21 阅读 · 0 评论 -
C++ Primer Plus: 第10章(2)
【代码】C++ Primer Plus: 第10章(2)原创 2023-08-16 18:03:22 · 745 阅读 · 0 评论 -
细节问题: 输入空行之后需要重置
如果使用cin.get( )输入了空行之后,必须使用cin.clear( )重置输入。当在一开始输入空行之后,后面对于变量j就没有了输入机会。原创 2023-08-16 11:56:46 · 54 阅读 · 0 评论 -
C++ Primer Plus 第10章(1)
对于类,我们来说公共接口,在这里,公众(public)是使用类的程序,交互系统由类对象组成,而接口是由编写类的人提供的方法组成。数据隐藏(将数据放在类的私有部分中)是一种封装,将实现的细节隐藏在私有部分中,就像Stock类对set_tot( )所做的那样,也是一种封装。这是通过让构造函数创建一个新的、临时的对象,然后将其内容复制给stock1来实现的,随后程序调用析构函数,以删除该临时对象。(1) 类声明: 以数据成员的方式描述数据部分,以成员函数(被称为方法)的方式描述公有接口。(2) 所持股票的数量。原创 2023-08-14 10:46:05 · 118 阅读 · 0 评论 -
C++ Primer Plus 第9章
另一种是引用声明(或简称为声明),它不给变量分配存储空间,因为他引用已有的变量。如果要在多个文件中使用外部变量,只需在一个文件中包含该变量的定义(单定义规则),但在使用该变量的其他所有文件中,都必须用关键字extern来声明它。也就是说,将指针加1,使之指向下一个字符,而不是修改被指针指向的字符。不过,由于++是后缀形式,因此在将*str的值赋给ch后,再将指针加1。str)将被加1,因为++运算符是前缀形式,所以首先将str加1,然后将得到的指针执行解除引用的操作。的优先级相同,但它们是从右到左结合的。原创 2023-08-10 14:30:12 · 220 阅读 · 0 评论 -
C++ Primer Plus 第8章
简单的说,ostream是基类(因为ofstream是建立在它的基础上的),而ofstream是派生类(因为它是从ostream派生来的)。在这样的情况下,编译器都将生成一个临时匿名变量,并让ra指向它,这些临时变量只在函数调用期间存在,此后编译器可以随意将其删除。15.如果有多个原型,则编译器在选择原型时,非模板版本优先于显式具体化和模板版本,而显示具体化优先于使用模板生成的版本。因此,C++不允许以这样的方式重载gronk( ) ,返回类型可以不同,但特征标也必须不同。然后将恢复到默认设置。原创 2023-08-08 13:42:34 · 239 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.07.25
3.在大多数情况下,数组名pa都是数组第一个元素的地址,即&pa[0]。因此,它是单个指针的地址。但&pa是整个数组(所有的元素块在一起)的地址。从数值上说,pa和&pa的值相同,但它们的类型不同。一种差别是,pa+1为数组中下一个元素的地址,而&pa+1为数组pa后面一个12字节内存块的地址(这里假设地址为4个字节,且数组有3个元素)。2.C++禁止将const的地址赋给非const指针。原创 2023-07-25 15:49:57 · 995 阅读 · 1 评论 -
C++ 如何识别字符串输入的空行
总结以上,就可以得到利用cin.get()判断在要输入字符串时,若用户输入空行,应如何进行判断。使用cin.get( ) 输入字符串时,如何识别用户是不是输入了一个空行?原创 2023-07-25 11:22:15 · 485 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.07.18
顺带说一句,在Ubuntu的文件中,哪怕只写一行且不敲回车键,还是有换行符存在的。原创 2023-07-18 12:38:08 · 1666 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.07.17
该函数的工作方式与C语言中的getchar( )相似,将字符编码作为int值返回;而cin.get(ch)返回一个对象,而不是读取的字符。(4)对cin方法的调用将返回false (如果被转换为bool类型)如果用户输入一个单词,而不是一个数字。(3)cin对象中的一个错误标记被设置。(2)不匹配的输入将被留在输入队列中。(1)n的值保持不变。原创 2023-07-17 23:05:25 · 363 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.07.15
这里要注意,计算机的输入队列和输出队列是分开的。原创 2023-07-15 11:13:01 · 510 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.07.14
【代码】C++ Primer Plus笔记: 2023.07.14。原创 2023-07-14 22:13:59 · 277 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.07.11
3.原因在cin,读取char值时,与读取其他基本类型一样,cin将忽略空格和换行符。因此输入中的空格没有被回显,也没有被包含在计数内。在第一次输入中如果输入了字符g,就失去了第二次输入机会,同时n此后就是0,之后一直都会是0。陷入了死循环,再也没有重新输入的机会了。原创 2023-07-12 05:53:36 · 211 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.07.05
如果第一个字符串按字母顺序排在第二个字符串之前,则strcmp( )将返回一个负数值,如果第一个字符串按字母顺序排在第二个字符串之后,则strcmp函数将返回一个正数值。5.如果在一个语句块中声明一个变量,而外部语句块中也有一个这种名称的变量,情况如何?4.如果在语句块中定义一个新的变量,则仅当程序执行该语句块中的语句时,该变量才存在,执行完该语句块后,变量将被释放。6.C++规定,逗号表达式的值是第二部分的值,在所有运算符中,逗号运算符的优先级是最低的。1.在C++中,每个表达式都有值。原创 2023-07-05 22:30:59 · 430 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.07.04
第四章课后习题:(4)(5)解法1:解法2:刚刚无意发现,在我这Ubuntu上不添加string头文件也能编译成功(9)这里要注意如何定义结构类型:需要注意两点,一是结构的成员后面要加分号,二是如果想用string的成员并且还想带上string头文件,要写成std::string,否则就别用string头文件,像这样也行:(7)(8)(6)(10)原创 2023-07-05 08:46:30 · 386 阅读 · 0 评论 -
C++ Primer Plus 笔记: 2023.07.03
由于第一次调用后,换行符将留在输入队列中,因此第二次调用时看到的第一个字符便是换行符。因此get( )认为已到达行尾,而没有发现任何可读取的内容,如果不借助于帮助,get( )将不能跨过该换行符。sizeof运算符指出整个数组的长度,15字节,但strlen()函数返回的是存储在数组中的字符串的长度,而不是数组本身的长度。另外,strlen( )只计算可见的字符,而不把空字符计算在内。这意味着cin在获取字符数组输入时只读取一个单词,读取了该单词后,cin将该字符串放到数组中,并自动在结尾添加空字符。原创 2023-07-04 00:10:08 · 150 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.07.01
8.“S"不是字符常量,它表示的是两个字符(‘S’和’\0’)组成的字符串,更糟的是,"S"实际上表示的是字符串所在的内存地址。6.如果想要在C++程序中不使用using,但还想去使用vector对象、array对象和string对象,该怎么办呢?这个是C++ 11新增的。用引号括起的字符串隐式的包括结尾的空字符,因此不用显式的包括它。与创建vector对象不同的是,n_elem不能是对象。像这样就行了:(不仅对int类型,对其他类型也是这样)原创 2023-07-02 04:52:47 · 191 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.06.30
在函数内部定义的常规变量使用自动存储空间,被称为自动变量,这意味着它们在所属的函数被调用时自动产生,在该函数结束时消亡。实际上,自动变量是一个局部变量,其作用域为包含它的代码块。代码块是被包含在花括号中的一段代码。如果在其中的某个代码块定义了一个变量,则该变量仅在程序执行该代码块中的代码时存在。如果结构标识符是结构名,则使用句点运算符,如果标识符是指向结构的指针,则使用箭头运算符。这意味着执行代码块时,其中的变量将依次加入到栈中,而在离开代码块时,将按相反的顺序释放这些变量,这被称为后进先出(LIFO)。原创 2023-07-01 01:53:13 · 246 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.06.29
加1的结果等于原来的地址加上指向的对象占有的总字节数。后一种运算将得到一个整数,仅当两个指针指向同一个数组(也可以指向超出结尾的一个位置)时,这种运算才有意义: 这将得到两个元素的间隔。如果要给cout提供一个指针,它将打印地址,但如果指针的类型为char*,则cout将显示指向的字符串。"wren"实际表示的是字符串的的地址,因此这条语句将“wren”的地址赋给了bird指针(一般来说,编译器在内存留出一些空间,以存储程序源代码中所有用引号括起来的字符串,并将每个被存储的字符串与其地址相关联)。原创 2023-06-29 23:55:05 · 226 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.06.28
tell[0](即tell)是一个两字节内存块的地址,而&tell是一个20字节内存块的地址。因此,表达式tell + 1将地址值加2,而表达式&tell + 1将地址加20。1.对数组应用sizeof运算符后得到的是数组的长度,而对指针应用sizeof得到的是指针的长度,即使指针指向的是一个数组。short),而&tell是一个这样的指针,即指向包含20个元素的short数组(short(2.数组名被解释为第一个元素的地址,而对数组名应用地址运算符时,得到的是整个数组的地址。原创 2023-06-28 22:02:42 · 328 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.06.26 AND 2023.06.27
接下来,将地址赋给pn,pn是被声明为指向int的指针。4.使用new时,如果在运行阶段需要数组,则创建它;如果不需要,则不创建,还可以在程序运行时选择数组的长度。这意味着数组是在程序运行时创建的,这种数组叫做动态数组。2.不要尝试释放已经释放的内存块,C++标准指出,这样做的结果将是不确定的,这意味着什么情况都有可能发生。6.如果使用new时,不带方括号,则使用delete时,也不应带方括号。3.一般不要创建两个指向同一个内存块的指针,因为有可能发生将一个内存块释放两次的错误。原创 2023-06-27 22:35:50 · 200 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.06.25
它的最大枚举值是101,在2的幂中,比这个数大的最小值为128,因此取值范围的上限为127。9.在C++早期的版本中,只能将int值(或提升为int的值)赋给枚举量,但这种限制如今已取消,因此可以使用long甚至long long类型的值。找到大于这个最大值的、最小的2的幂,将它减去1,得到的就是取值范围的上限。1.C++的enum工具提供了另一种创建符号常量的方式,这种方式可替代const。6.可以通过强制类型转换的方式,将int的值赋给枚举变量,但要是对一个不当的值进行类型转换,结果就不确定了。原创 2023-06-25 23:22:52 · 263 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.06.24
7.共用体能够存储不同的数据类型,但只能同时存储其中的一种类型。例如,可以将结构作为参数传递给函数,也可以让函数返回一个结构。另外,还可以使用赋值运算符( = )将结构赋值给另一个同类型的结构,即使成员是数组。8.共用体用途之一是,当数据项使用两种或更多格式时(但不会同时使用),可节省空间,假设管理一个小商品目录,其中有一些商品的ID为整数,而另一些的ID为字符串。3.C++结构变量的初始化中,若大括号内未包含任何东西,则各个成员将被设为0。缩窄指的是变量的类型可能无法表示赋给它们的值。原创 2023-06-25 11:03:30 · 1778 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.06.23
另外,也没有指出字符串长度的参数,因为string对象将根据字符串的长度自动调整自己的大小。自定义定界符时,在默认定界符之间添加任意数量的基本字符,但空格、左括号、右括号、斜杠和控制字符(如制表符和换行符)除外。1.要想在C++中使用C语言的字符串的函数,可以用头文件cstring。头文件string提供了string类,头文件cstring则提供了C语言风格的字符串库函数。在这里,str1是一个string对象,而size( )是string类的一个方法。方法是一个函数,只能通过所属类的对象进行调用。原创 2023-06-23 12:07:33 · 120 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.06.22
用户根本没有输入地址的机会,当cin读取年份,将回车键生成的换行符留在输入队列之中。后面的cin.getline( )看到换行符后,将认为是一个空行,并将一个空字符串赋给address数组。原创 2023-06-23 07:09:56 · 611 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.06.21
该函数有两个参数,第一个是用来存储输入行的数组名,第二个是要读取的字符数。10.cin使用空白(空格、制表符和换行符)来确定字符串的结束位置,这意味着cin在获取字符数组输入时只读取一个单词。读取该单词后,cin将该字符串放到数组中,并自动在结尾添加空字符。4.如果将sizeof运算符用于数组名,得到的将是整个数组中的字节数,但如果将sizeof用于数组元素,则得到的将是数组的长度(单位为字节)。3.如果没有初始化函数中定义的数组,则其元素值将是不确定的,这意味着元素的值为以前驻留在该内存单元的值。原创 2023-06-21 17:21:52 · 671 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.06.20
1.C++ 11将使用大括号的初始化称为列表初始化,因为这种初始化常用于给复杂的数据类型提供值列表。列表初始化不允许缩窄,即变量的类型可能无法表示赋给他们的值。在不同的整型之间转换或将整型转换为浮点型可能被允许,条件是编译器知道目标变量能够正确存储赋给它的值。具体来说,true被转化为1,false被转化为0。注意: 初始化c4时,您知道x的值为66,但在编译器看来,x是一个变量,其值可能很大。3.通常将int类型选择为计算机最自然的类型,这意味着计算机使用int类型时,运算速度可能最快。原创 2023-06-20 18:24:12 · 101 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.06.16 AND 2023.06.17
3.C++有一种更好的处理符号常量的方法,就是使用const关键字来修改变量声明和初始化。这种调用迫使输出使用定点表示法,以便更好地了解精度,它防止程序把较大的值切换为E表示法,并使程序显示到小数点后六位。8.除法运算符()的行为取决于操作数的类型。这意味着结果的小数部分将被丢弃,使得最后的结果是一个整数。如果其中有一个(或两个)操作数是浮点数,则小数部分将保留,结果为浮点数。1.iostream头文件的最新版本提供了作用相似的工具——wcin和wcout,可用于处理wchar_t流。原创 2023-06-17 20:47:35 · 558 阅读 · 0 评论 -
C++ Primer Plus 笔记: 2023.06.15
振铃字符\a必须和换行输出相结合才能发挥作用。原创 2023-06-16 11:59:32 · 481 阅读 · 0 评论 -
C++ Primer Plus 笔记:2023.06.13 AND 2023.06.14
5.可以基于字符的八进制和十六进制编码来使用转义序列。例如,Ctrl+Z的ASCII码为26,对应的八进制编码为032,十六进制编码为0xla。可以用下面的转义序列来表示该字符: \032或\0xla。将这些编码用单引号括起, 可以得到相应的字符常量,比如’\032’,也可以将他们放在字符串中,如。原创 2023-06-14 22:38:17 · 83 阅读 · 0 评论 -
C++ Primer Plus 笔记: 2023.06.09 AND 2023.06.12
不出现编译器错误的原因是,这样的名称不是非法的,但要留给实现使用。C++的基本整型按宽度递增的顺序排列分别是char,short,int,long和C++ 11新增的long long,其中每种类型都有符号版本和无符号版本。13.整型的无符号变体的优点是可以增大变量能够存储的最大值,例如,如果short表示的范围为-32768到+32767,则无符号版本的表示范围为0—65535。14.如果知道变量可能表示的整数值大于16位整数的最大可能值,则使用long,即使系统上int为32位,也应该这样做。原创 2023-06-13 01:43:49 · 1250 阅读 · 0 评论 -
C++ Primer Plus 笔记: 2023.06.08
【代码】C++ Primer Plus 笔记: 2023.06.08。原创 2023-06-08 22:18:02 · 265 阅读 · 0 评论 -
C++ Primer Plus笔记:2023.06.04
在C++中,类是一种规范,它描述了这种新型数据格式,对象是根据这种规范构造的特定数据结构,例如,类可以描述公司管理人员的基本特征(姓名、头衔、工资、特长),而对象则代表了特定的管理人员(Sheepblat,副总裁,$925000,知道如何恢复注册表)。该编译指令导致预处理器将iostream文件的内容添加到程序中,这是一种典型的预处理器操作:在源代码被编译前,添加或替换文本。名称空间让厂商能够将其产品封装在一个叫做名称空间的单元中,这样就可以用名称空间的名称来指出想用哪个厂商的产品。原创 2023-06-05 10:35:17 · 78 阅读 · 0 评论 -
C++ Primer Plus笔记: 2023.06.05 AND 2023.06.06
总结来一句话:类描述了一种数据类型的全部属性(包括可使用它执行的操作),对象是根据这些描述创建的实体。原创 2023-06-06 13:34:15 · 506 阅读 · 0 评论