C++Primer学习笔记
N1314N
有志者事竟成
展开
-
请你说一说异步编程的事件循环
参考回答:事件循环就是不停循环等待时间的发生,然后将这个事件的所有处理器,以及他们订阅这个事件的时间顺序依次依次执行。当这个事件的所有处理器都被执行完毕之后,事件循环就会开始继续等待下一个事件的触发,不断往复。当同时并发地处理多个请求时,以上的概念也是正确的,可以这样理解:在单个的线程中,事件处理器是一个一个按顺序执行的。即如果某个事件绑定了两个处理器,那么第二个处理器会在第一个处理器执...原创 2019-06-28 20:04:46 · 547 阅读 · 0 评论 -
第七章:访问控制与封装以及类的其他特性专题
一、访问控制与封装(1)在类的定义中对于访问说明符出现的位置和次数有限定吗?如果有,是什么?什么样的成员应该定义在public说明符之后?什么样的成员应该定义在private说明符之后? 解析:没有,一个类可以包含0个或者多个访问说明符,而且对于某个访问说明符能出现多少次也没有严格的限定。每个访问说明符指定了接下来的成员访问级别,其有效范围直到出现下一个访问说明符或者到达类的结尾处为止。定义...原创 2019-04-19 15:55:51 · 210 阅读 · 0 评论 -
第六章:函数匹配与函数指针知识点及答案呢
一、函数匹配相关的知识点。(a)什么是候选函数?什么是可行函数?知识点1:候选函数:函数匹配的第一步是选定本次调用的重载函数集,集合中的函数被称为候选函数。候选函数的特征:一是与被调用的函数同名,二是其声明在调用点可见。知识点2:根据实参情况,从候选函数中挑选出能被这实参调用的函数,此次选出的函数被称为可行函数。可行函数的特征:一是其形参数量与本次调用提供的实参数量相等,二是每个实参的类...原创 2019-04-18 16:53:12 · 2791 阅读 · 0 评论 -
第六章:默认实参、内联函数、constexpr函数(三种函数的语言特性)专题
一、默认实参(1)下面哪个声明是错误的?为什么? (a) int ff (int a, int b=0, int c=0); (b)char *init(int ht = 24, int wd, char bckgrnd); 解析:(b)是错误的;考察知识点为:一旦函数的某个形参被赋予了默认值,他后面所有的参数都必须有默认值。(2)下面调用哪个是合法的?为什么?哪个调用虽然...原创 2019-04-18 15:00:44 · 278 阅读 · 0 评论 -
第六章:函数重载知识点及习题答案----自己归纳版
一、函数重载定义:如果同一作用域内的几个函数名字相同但形参列表不同,我们称之为重载函数。但是需要注意的是:main函数不能重载。二、函数匹配定义:是指一个过程,在这个过程中我们把函数调用与一组重载函数中的某一个关联起来,所以函数匹配也叫做重载确定。三、当调用重载函数时有三种可能的结果(1)编辑器找到一个与实参最佳匹配的函数,并生成调用该函数的代码(2)找不到任何一个函数与调用的实参匹配...原创 2019-04-18 10:11:56 · 670 阅读 · 0 评论 -
《C++递归算法详解》——自己归纳版
一、Introduction递归算法是一种直接或者间接调用自身函数或者方法的算法。递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。递归算法,其实说白了,就是程序的自身调用。它表现在一段程序中往往会遇到调用自身的那样一种coding策略,这样我们就可以利用大道至简的思想,把一个大的复杂的问题层层转换...原创 2019-04-18 09:08:25 · 11475 阅读 · 2 评论 -
第六章:返回值类型和return语句
一、什么情况下返回的引用无效?什么情况下反回常量的引用无效?知识点1:返回的引用无效:局部临时变量或者局部对象的引用对于返回都是无效的,因为在函数终止之后,局部变量或者对象的引用不再指向有效的内存区域。若是常量在函数调用之前存在,引用即可用。知识点2:可以对返回值是非常量引用的函数结果赋值。**来!举个例子来理解一下啊!!!** #include <iostream>...原创 2019-04-17 20:36:15 · 1125 阅读 · 0 评论 -
第六章:数组形参相关知识点以及习题答案
一、编写一个程序,令其接受两个参数:一个是int型的数,另一个是int指针。函数比较int的值和指针所指的值,返回较大的那个。在该函数中指针的类型应该是什么? 知识点1:数组的两个特殊点: 1、不允许拷贝数组,所以不可以使用传值的方式使用数组参数(传值即为拷贝) 2、通常数组的传递使用的是指针形式,传递的是指针的首地址。 ...原创 2019-04-17 16:47:39 · 282 阅读 · 0 评论 -
第六章:const形参和实参知识点以及习题答案
一、下面的这个函数虽然是合法的,但是不算特别有用。指出它的局限性并设法改善。 bool is_empty(string& s) { retrun s.empty();} 解析:字符串s在函数中无需修改,所以最好是加上const 表示常量引用。 将程序变为:bool is_empty(const string& s) { retrun s.empty();}...原创 2019-04-17 15:27:24 · 341 阅读 · 0 评论 -
第六章:参数传递(传值参数、传引用参数)知识点以及习题答案
一、形参初始化的机理和变量初始化的机理一样。当形参是引用类型时,我们说它对应的实参被引用传递或者函数被传引用调用。引用形参是它对实参的别名。二、编写一个函数,使指针形参交换两个整数的值。在代码中调用该函数并输出交换后的结果,以此验证函数的正确性。 考察知识点:知识点1:通过使用引用形参,可以改变实参的值。 知识点2:使用引用避免拷贝,因为如果对象特别巨大,拷...原创 2019-04-17 14:35:20 · 791 阅读 · 0 评论 -
第七章:类的其他特性+返回*this的成员函数+类类型+友元再探
一、编写自己的Screen类。知识点1:类可以自定义某种类型在类中的别名———通过typedef和using;知识点2:如果我们需要合成的默认构造函数,在空列表的构造函数后加上=default即可;知识点3:类的成员也可以重载,参数列表数量或者类型上不同;知识点4:在变量前加关键字mutable,变为可变数据成员,即使是在一个const的对象函数中也可以被修改;知识点5:类内初始值,直接...原创 2019-04-19 16:53:47 · 188 阅读 · 0 评论 -
第七章:类----定义抽象数据类型基础知识和习题答案
一、类的基本思想为:数据抽象和封装。类要想实现数据抽象和封装,需要首先定义一个抽象数据类型。原创 2019-04-19 10:05:11 · 750 阅读 · 0 评论 -
请你说一下进程与线程的概念,以及为什么要有进程线程,其中有什么区别,他们各自又是怎么同步的
参考回答:基本概念:(1)进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发;(2)线程是进程的子任务,是CPU调度和分派的基本单位,用于保证程序的实时性,实现进程内部的并发;线程是操作系统可识别的最小执行和调度单位。每个线程都独自占用一个虚拟处理器:独自的寄存器组,指令计数器和处理器状态。每个线程完成不同的任务,但是共享同一地址空间(也就是同样的动...原创 2019-06-24 17:14:12 · 1490 阅读 · 0 评论 -
请你说一说有了进程,为什么还要有线程?
参考回答:线程产生的原因:进程可以使多个程序能并发执行,以提高资源的利用率和系统的吞吐量;但是其具有一些缺点:1、进程在同一时间只能干一件事2、进程在执行的过程中如果阻塞,整个进程就会挂起,即使进程中有些工作不依赖于等待的资源,仍然不会执行。因此,操作系统引入了比进程力度更小的线程,作为并发执行的基本单位,从而减少程序在并发执行时所付出的时空开销,提高并发性。和进程相比,线程的优势如下...原创 2019-06-26 09:29:32 · 3241 阅读 · 0 评论 -
请你来说一下什么时候会发生段错误
段错误通常发生在访问非法内存地址的时候,具体来说分为以下几种情况:1、使用野指针2、试图修改字符串常量的内容原创 2019-06-21 14:32:45 · 1366 阅读 · 0 评论 -
请你回答一下malloc的原理,另外brk系统调用和mmap系统调用的作用分别是什么?
Malloc函数用于动态分配内存。为了减少内存碎片和系统调用的开销,malloc其采用内存池的方式,先申请大块内存作为堆区,然后将堆区分为多个内存块,以块作为内存管理的基本单位。当用户申请内存时,直接从堆区分配一块合适的空闲块。Malloc采用隐式链表结构将堆区分成连续的、大小不一的块,包含已分配块和未分配块;同时malloc采用显示链表结构来管理所有的空闲块,即使用一个双向链表将空闲块连...原创 2019-06-21 14:31:05 · 1780 阅读 · 1 评论 -
请你来说一下C++中类成员的访问权限
参考回答:C++通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。在类的内部(定义类的代码内部),无论成员被声明为 public、protected 还是 private,都是可以互相访问的,没有访问权限的限制。在类的外部(定义类的代码之外),只能通过对象访问成员,并且通过对象...原创 2019-06-21 14:23:55 · 1509 阅读 · 0 评论 -
const关键字作用,const和宏定义区别?
【1】作用 const所修饰的内容是不可变的,比如说:const变量、const成员函数、const参数、const返回值等等, const所修饰的内容具有强制保护性;可以防止代码随意改动,提高了代码的鲁棒性。【2】区别 1、const常量有数据类型,宏定义常量没有数据类型。编辑器可以对const常量进行类型安全检查,而对宏常量 进行字符替换没有类型安全检查,并且在替换的时候会产生...原创 2019-05-31 09:17:35 · 2451 阅读 · 0 评论 -
第七章:构造函数面试题目专题
一、下面初始值是错误的,请找出问题所在并尝试修改它。 struct X { X(int i,int j):base(i),rem(base%j){ } int rem,base; } 解析: 此类问题经常考察的知识点为: 知识点1:类内成员是const、引用时或者使用某种类类型没有默认构造函数的成员时必须将其初始...原创 2019-04-22 11:18:19 · 1080 阅读 · 0 评论 -
第七章;类的作用域---知识点及习题答案
一、类的作用域(1)如果我们给Screen添加一个如下所示的size成员将发生什么情况?如果出现了问题,请尝试修改它。 pos Screen::size() const { return height *width; }解析:知识点1:一个类就是一个作用域,函数使用的相关变量名,已经明确了在类的作用域当中,所以不必再进行说明...原创 2019-04-20 15:10:14 · 375 阅读 · 0 评论 -
C++中树相关知识大全
一、树的基本知识(1)概念 **树**:树是一些节点的集合。这个集合可以是空集;若集合不是空集,则树由根节点r以及0个或多个子树组成。 **边**:两个节点之间的连线就是边。 **树叶**:没有儿子的节点称为树叶。 **节点的度**:节点拥有的子树数称为节点的度。 **度**:节点的度的最大值称为树的度。 ...原创 2019-04-23 11:03:45 · 3242 阅读 · 0 评论 -
第六章:函数声明、分离式编译知识点以及习题答案
一、函数只能定义一次,但可以声明多次。如果一个函数永远也不会被我们用到,那么它可以只有声明没有定义。二、函数声明和函数定义之间的区别?解析:函数声明和函数定义非常的类似,唯一的区别是函数声明无须函数体,用一个分号代替即可。函数声明三要素:返回类型、函数名、形参类型三、含有函数声明的头文件应该被包含到定义函数的源文件中。四、编写一个名为Chapter6.h的头文件,练习一下函数声明。 ...原创 2019-04-17 08:58:46 · 364 阅读 · 0 评论 -
第六章:局部对象知识点与习题答案
一、说明形参、局部变量以及局部静态变量的区别。编写一个函数,同时用到这三中形式。 知识点1:局部变量:形参和函数体内部定义的变量统称为局部变量(注意其作用域)。 知识点2:局部静态对象:直到程序的结束才被销毁的对象,不受块的约束。 知识点3:形参:是一种自动对象。函数在开始的时候为形参申请存储空间,因为形参定义在函数体作用域之内,所以一但函数终止,形参也开始被销毁。 #inc...原创 2019-04-16 21:15:09 · 169 阅读 · 0 评论 -
第三章:数组知识点和习题答案以及学习感受
1、定义数组的时候必须指定数组的类型,不允许用auto关键字由初始值的列表推断类型。2、字符数组的特殊性:字符数组有一种额外的初始化形式,我们可以用字符串字面值对此类数组初始化。当使用这种形式时,一定注意字符串字面值的结尾处还有一个空字符。 例子:char a1[] = {‘C’,‘+’,‘+’}; //列表初始化,没有空字符 a1的维度是3 char...原创 2019-04-13 09:42:01 · 441 阅读 · 0 评论 -
第三章:迭代器知识点和部分例题答案以及学习感受
1、使用下标运算符和迭代器均可以访问string对象的字符或者vector对象的元素。2、迭代器的特点: (1)迭代器可以访问某个元素,同时迭代器也可以从一个元素移动到另外一个元素。 (2)迭代器分为有效和无效之分这一点和指针差不多,有效的迭代器或者指向某个元素,或者指向容器尾元素的下一位置;其他的所有情况均属于无效的。3、迭代器运算符...原创 2019-04-12 20:58:49 · 383 阅读 · 0 评论 -
第三章《标准库类型vector初始化》知识点和部分课后习题答案以及学习感受
1、C++既有函数模板也有类模板,其中vector是一个类模板。编辑器根据模板创建类和函数的过程被称为实例化。2、列表初始值还是元素数量?在某些情况下,初始化的真实含义依赖于传递初始值时用的花括号还是圆括号。用一个整数来初始化vector时,整数的含义可能是vector对象的容量也可能是元素的值。 例子: 【1】vector<int> v1(10); //v1有10...原创 2019-04-12 10:50:30 · 238 阅读 · 0 评论 -
第三章:字符串知识点、部分习题答案、以及学习心得感受
1、知识点:using声明命名空间。注意的是头文件中不应该包含using声明,因为在引用头文件时,会将头文件中的内容拷贝到文件中来,如果头文件中包含了using声明,那么可能每一个头文件中都会包含using声明,可能会造成名字的冲突。常加:using namespace std ;(将标准库声明)2、例题:编写一段程序从标准输入中一次读入一行,然后修改该程序使其一次读入一个词。知识点:读入...原创 2019-04-11 20:52:32 · 279 阅读 · 0 评论 -
C++primer中constexper和常量表达式、auto类型说明符、decltype类型指示符、自定义数据结构知识点及部分例题答案、以及学习心得感受
1、constexpr 和常量表达式 常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。显然,字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。 例子:(1)const int max_files=20; //max_files是常量表达式 (2)const int limit...原创 2019-04-11 15:43:46 · 646 阅读 · 0 评论 -
C++primer 第二章中 const限定符知识点和部分例题解析以及学习心得感受
1、关于const 限定符的知识点 const表示不可改变的量!const用在变量定义时的类型前表示该变量不可改变,注意:该变量必须初始化(可以在运行时初始化)。 例子: const int buf; 不合法,因为变量为初始化。 int cnt=0; 合法。 const...原创 2019-04-11 09:59:44 · 428 阅读 · 0 评论 -
第二章变量中复合类型以及学习心得感受
1、C++中有很多的符合类型:我们这里讲到了常用的两种 “ 引用 和 指针 ” 引用的定义:为对象起了另外一个名字,引用类型引用另外一种类型。因为引用本身不是一个对象,所以不能定义引用的引用。允许在一条语句中定义多个引用,其中每个引用表示符都必须以符号&开头。 例子:int ival=1024; int &refVal=ival; ...原创 2019-04-10 16:52:49 · 239 阅读 · 0 评论 -
C++primer第二章变量与基本类型知识点和部分课后习题答案以及学习感受
一、算术类型分类:整型(包括字符和布尔类型在内)、浮点型二、类型int、long、long long、short的区别是什么?答:int(整型)和 short(短整型)至少是16个字节,long(长整型)至少是32个字节,long long(长整型)至少是64个字节三、无符号类型和带符号类型的区别?答:带符号类型可以表示正数、负数或0,但是无符号数仅仅表示大于等于0的数。四、float ...原创 2019-04-10 10:45:04 · 615 阅读 · 0 评论 -
C++primer 第一章开始基础知识及学习感受
一、函数的定义包含四部分:返回类型、函数名、形参列表、函数体例子:int main(){return 0;}二、注意:return的语句末尾是分号结束三、重要的概念类型:类型是程序中最基本的概念之一,一种类型不仅定义了数据元素内容,还定义了这类数据上可以进行的运算。四、iostream 库包含两个基础类型:istream 和ostream 分别表示输入流和输出流。五、C++中有两...原创 2019-04-08 21:32:25 · 226 阅读 · 0 评论 -
第三章:指针与数组专题
一、知识点:(1)指针也是迭代器vector和string的迭代器支持的运算,数组的指针全都支持。(2)从一个指针加上(减去)某个整数值,结果仍是指针。新指针的元素与原来的指针元素相比前进(后退了)该整数值个位置。(3)和迭代器一样,两个指针相减的结果是他们之间的距离,参与两个运算的指针必须指向同一个数组当中的元素。(4)两个指针相减的结果的类型是一种名为ptrdiff_t的标准库类型,因...原创 2019-04-13 11:23:30 · 337 阅读 · 0 评论 -
第三章:多维数组专题
一、编写一段程序,用整形数组初始化一个vector对象。 #include <iostream> #include <string> #include <vector> using namespace std; int main() { int a[10] = { 0,1,2,...原创 2019-04-13 16:22:02 · 192 阅读 · 0 评论 -
第六章:函数基础知识(以及习题答案)
一、实参和形参的区别? 形参:函数定义的时的参数—也就是无赋值的变量(作用是说明参数的类型) 实参:调用函数时使用的参数—也就是有赋值的变量(函数实际操作的对象) 实参是形参的初始值。二、请指出下列函数哪个是有错误的,为什么?应该如何修改这些错误呢? (a)int f () { string s; //.... return s; ...原创 2019-04-16 20:45:20 · 490 阅读 · 0 评论 -
第五章:迭代语句(for语句、跳转语句)知识点及答案
一、do while语句do while 语句和while 语句非常相似,唯一的区别是,do while 语句先执行循环体后检查条件。do while 语句应该在括号包围起来的条件后面用一个分号表示语句结束。 do statement while (condition);二、练习题目 (1)编写一段程序,使用do while循环重复地执行下述任务:首先提示用户输入两个str...原创 2019-04-16 16:30:27 · 278 阅读 · 0 评论 -
第五章:迭代语句(while语句)知识点及习题答案
一、迭代语句又称为循环。(不确定要迭代多少次时我们使用while语句比较合适) #include <iostream> #include <string> #include <vector> using namespace std; int main() { ...原创 2019-04-15 20:51:15 · 461 阅读 · 0 评论 -
第五章:C++Primer条件语句的习题答案
(1)修改下面代码中的错误。(a)if (ival1 !=ival2) ival1 = ival2 else ival1 = ival2 = 0; 解析:ival1 = ival2 ; //缺少一个分号(b)if (ival1 < minva1) minva1 = ival1; occu...原创 2019-04-15 20:07:51 · 409 阅读 · 0 评论 -
第五章:简单语句知识点专题
一、什么是空语句?什么时候用到空语句?(1)解析:最简单的语句是空语句,空语句中只含有一个单独的分号。 ; //空语句(2)如果在程序的某个地方,语法上需要一条语句但是逻辑上不需要,此时应该使用空语句。一种常见的情况是,当循环的全部工作在条件部分就可以完成时,我们通常会用到空语句。while (cin >>s && s != sought ) ...原创 2019-04-15 15:57:18 · 323 阅读 · 0 评论 -
第四章:逗号运算符专题
一:逗号运算符的定义:含有两个运算对象,按照从左向右的顺序依次执行求值,逗号运算符的真正结果是右侧表达式的值。二、算术转换:把一种算术类型转换成另外一种算术类型,算术转换的规则定义了一套类型转换的层次,其中运算符的运算对将转换成最宽的类型。假如一个运算对象的类型是long double,那么不论另外一个运算对象的类型是什么都转换成long double型,当表达式中既有浮点型也有整数类型时,整数...原创 2019-04-15 15:05:15 · 419 阅读 · 0 评论