C++Primer 第五版习题答案详解
文章平均质量分 54
解题的同时温习重要知识点。
记住重要知识点的同时完美的解决问题。
吃透本书,大有裨益!
优惠券已抵扣
余额抵扣
还需支付
¥49.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
MISAYAONE
拒绝一切形式的代考,替考行为!!!本人所写题库均搜集于互联网。
展开
-
C++Primer第五版——习题答案+详解(完整版)
C++Primer第五版——习题答案详解 看的也比较快,但是有很多东西确实用不上,所以很多都没有深入的探讨,但是知识点覆盖的很全面,每一道题涉及的知识点我都写上简单的解释了。 文中代码的中文注释也尽量都写上,自己皆编译通过。 水平有限,如有有误之处,希望大家不吝指教! 下面的链接是第一章:全部题目(第一章基础较多)http:/原创 2016-12-21 16:11:30 · 333465 阅读 · 103 评论 -
C++Primer第五版 第十四章习题答案(1~5)
C++Primer第五版 第十四章习题答案(1~5)原创 2022-09-11 16:49:22 · 552 阅读 · 0 评论 -
C++Primer第五版 第十九章习题答案(21~26)
21、22、23:知识点1:union是一种特殊的类,可以包含多个数据成员,但是在任意时刻只能有一个数据成员可以有值,其他成员属于未定义的状态,分配给union的内存只要能存储它的最大数据成员即可知识点2:union中不能含有引用类型的成员,但不可继承、不含有虚函数知识点3:union的名字就相当于一个类型名,可以使用一对花括号显式初始化:union Token {};//后面的分号勿原创 2017-03-24 09:43:14 · 2870 阅读 · 9 评论 -
C++Primer第五版 第十九章习题答案(1~10)
C++特殊的工具和技术1:知识点1:new和delete运算符的实现细节:new的操作过程:第一步、new表达式调用operator new(或者 operator new[])的标准库函数,该函数分配一块足够大的、原始的、未命名的内存空间以便存储特定类型的对象(或数组)。第二步、编译器运行相应的构造函数以构造这些对象,并为其传入初始值。第三步、对象分配了空间并构造完成,返回一个指向该对象原创 2017-03-23 09:26:14 · 4093 阅读 · 11 评论 -
C++Primer第五版 第十九章习题答案(11~20)
11:知识点1:枚举类型使得我们可以将一组整型常量组织在一起,但是每一个枚举类型都定义了一种新的类型知识点2:C++11新标准引入了限定作用域的枚举类型,带有class或struct关键字的,就是限定作用域的枚举类型,形式为enum (class/struct) XX { 枚举成员 };,注意后面需要加分号结尾,若enum没有名字,那么我们只能在定义时初始化该对象知识点3:在限定作用域的枚原创 2017-03-23 09:30:13 · 3133 阅读 · 4 评论 -
C++Primer第五版 第十八章习题答案(21~30)
21:知识点1:多重继承是指从多个基类中产生派生类的情况,多重继承的派生类继承了所有父类的属性知识点2:继承的访问说明符被忽略的话,class默认为private,struct默认为public知识点3:构造一个派生类对象时将会同时构造并初始化它所有的基类子对象,如若不是显示初始化,则其会使用基类的默认构造函数进行初始化,基类的构造顺序与派生类列标准基类出现的顺序一致知识点4:C++1原创 2017-03-21 09:23:45 · 3312 阅读 · 13 评论 -
C++Primer第五版 第十八章习题答案(1~10)
大规模应用程序的特殊要求知识点1:异常处理:在独立开发的子系统之间协同处理错误的能力知识点2:命名空间:使用各种库(可能包含独立开发的库)进行协同开发的能力知识点3:多重继承:对比较复杂的应用概念建模的能力1:知识点:C++通过抛出一个表达式来引发一个异常,throw之后的代码将不会被执行,程序控制权将从throw转移到与之匹配的catch模块(即捕获)(若try语原创 2017-03-20 09:26:56 · 4244 阅读 · 3 评论 -
C++Primer第五版 第十八章习题答案(11~20)
11:what函数是用来返回初始化异常对象信息的,若what中也要抛出异常,是不是就造成无限递归了12:知识点1:传统意义上,可以将全局定义的实体名字定义的很长以避免命名空间污染,这样的名字通常将其名字所属的库作为前缀,但比较费时费力知识点2:命名空间可以更好的防止名字冲突,且避免全局名字的固有限制知识点3:namespace后加命名空间的名字,加上一对花括号就是一个完整的命名原创 2017-03-20 09:31:19 · 3311 阅读 · 2 评论 -
C++Primer第五版 第十七章习题答案
这一章暂时没多大用处,以后遇到需要使用的情况再看,不过还是要大概了解下讲的是什么,不然看代码看到了都不知道是什么1:tuple类型,tuple意为元组,类似于pair,但参数可以有很多个,可以用于函数返回多个值的情况(话说使用结构体也可以),需要tuple头文件2:bitset类型,bit+set,类似于array,可以存储二进制位,大小不可变3:正则表达式:描原创 2017-03-19 09:37:25 · 3552 阅读 · 1 评论 -
C++Primer第五版 第十六章习题答案(51~60)
51:知识点1:可变函数模版就是指一个接受可变数目参数的模版函数或者模版类,可变数目的参数被称为参数包,分为两种:模版参数包,表示零个或多个模版参数,函数参数包,表示零个或多个函数参数知识点2:C++11新标准才可用,利用一个省略号来表示一个模版参数或者函数参数为一个包template void Foo(const T&, const U&...dest){ //U表示一个模版参数包,原创 2017-03-18 09:29:14 · 4187 阅读 · 4 评论 -
C++Primer第五版 第十六章习题答案(61~67)
61:自己定义shared_ptr是不是在哪做过,忘了。62:知识点1:当我们不能(或者不希望)使用模版版本时,我们可以定义类模版或者函数模版的一个特例化版本:比如说函数模版中的处理不适用于未定义知识点2:一个特例化版本就是模版的一个独立的定义,在其中一个或者多个参数被特定为指定的类型知识点3:在为函数模版特例化时,必须为函数模版的每个模版参数提供实参,尖括号中的模版参数去掉,原创 2017-03-18 09:29:48 · 3282 阅读 · 5 评论 -
C++Primer第五版 第十六章习题答案(31~40)
31:unique_p是保存删除器函数的指针,所以需要一次跳转操作,并不会内联而是跳转32:知识点1:从函数实参到模版实参的过程被称为模版实参推断,在这个过程中,可能会发生类型转换知识点2:只有很有限的几种方式会发生类型转换1:非const对象的引用或者指针到const对象的引用或者指针(const到非const是不合法的)(顶层const会被忽略)2:若函数参数不是引用的原创 2017-03-17 09:14:12 · 4291 阅读 · 22 评论 -
C++Primer第五版 第十六章习题答案(41~50)
41:头文件#ifndef REU_TYPE_H#define REU_TYPE_Htemplate auto sum(const T&a,const T&b) ->decltype(a+b)//将函数的返回类型指定为a+b的类型{ return a+b;}#endif REU_TYPE_Hmain.cpp#include #include #include原创 2017-03-17 09:16:00 · 3666 阅读 · 10 评论 -
C++Primer第五版 第十六章习题答案(11~20)
类模版也是相当的重要,遇到过很多次,好好理解吧11:知识点1:类模版的定义:与函数模版不同的是,编译器不会为类模版推断模版参数类型,所以我们在使用类模版时,需要显式地指出元素的类型,在其定义中,模版参数可以当作类型使用,用来表示类保存的元素的类型:比如说类中保存了一个T类型的vector变量知识点2:我们可以将类中元素访问操作的返回类型定义为T&,也就是模版参数的引用,在被实例化之后,T会原创 2017-03-16 09:41:02 · 5570 阅读 · 7 评论 -
C++Primer第五版 第十六章习题答案(21~30)
21:知识点1:一个类无论是类模版还是普通类,都可以将其成员函数定义为模版,称之为成员模版,但是成员模版不能是虚函数debug.h#ifndef DEBUG_H#define DEBUG_Hclass Debugdelete{public: Debugdelete(ostream &s = cerr):os(s){}//构造函数 template void operator原创 2017-03-16 09:44:50 · 4586 阅读 · 17 评论 -
C++Primer第五版 第十五章习题答案(31~40)
后面的题目主要是进行练习,即使是照搬书本上的例子,也要做一做31:知识点1:继承体系:is a ,和has a 的区别。知识点2:将层次关系隐藏与接口类之中,保存一个基类(抽象基类)派生类的对象的指针32:拷贝:调用合成的拷贝构造函数,将智能指针q的内容复制到新对象的对应成员,使智能指针q计数+1移动:调用合成的移动构造函数,将智能指针q的内容移原创 2017-03-14 09:27:16 · 4791 阅读 · 17 评论 -
C++Primer第五版 第十五章习题答案(41~42)
41:非智能指针,所有的new都需要进行手动delete.42:写出自己的思路吧,就不具体实现了(a):这一小问感觉有点问题,描述不清楚。个人理解:将文件读入之后,每行保存在一个vector中,根据输入单词,每行查询,输出对应单词(b):重新定义一个类,将每次的查询结果用一个map保存起来就好了,int为编号,map为查询结果(c):指定文本范围,根据输入限制一下vecto原创 2017-03-14 09:27:58 · 2989 阅读 · 0 评论 -
C++Primer第五版 第十六章习题答案(1~10)
1:知识点1:面对对象编程OOP和泛型编程都能处理在编写程序时不知道类型的情况,而OOP能处理类型在程序运行之前都未知的情况,在泛型编程中,在编译时就能获知类型了知识点2:容器、迭代器、算法都是泛型编程的例子知识点3:模版是C++泛型编程的基础,一个模版就是一个类或函数的蓝图或者说是公式:例如在使用vector这样的泛型类型,或者是find函数这样的泛型类型,我们可以将蓝图转换为特定的类或原创 2017-03-14 09:30:56 · 5573 阅读 · 7 评论 -
C++Primer第五版 第十五章习题答案(21~30)
21:发挥自己的想象力吧!#ifndef FLOWER_H#define FLOWER_H#include using namespace std;class Flower//花店花朵{public: Flower();//默认构造函数 Flower(const string& s,double sale_pice):name(s),Price(sale_pice){}//原创 2017-03-13 09:35:58 · 6713 阅读 · 15 评论 -
C++Primer第五版 第十五章习题答案(11~20)
11:知识点1:当我们使用引用或者指针调用一个虚成员函数时才会执行动态绑定,因为我们知道在程序运行时才知道到底调用了哪个版本的虚函数,所以所有虚函数都必须有定义知识点2:引用和指针的静态类型与动态类型不同的这一事实是C++语言支持多态性的根本所在(必须是虚函数)知识点3:一个派生类的函数成员如果覆盖了基类的继承而来的虚函数,则它的形参类型必须与被它覆盖的基类函数完全一致,返回类型也必须相匹原创 2017-03-12 09:39:06 · 6740 阅读 · 16 评论 -
C++Primer第五版 第十三章习题答案(51~58)
51:P418已经说的很清楚,使用的是移动操作,因为返回值相当于一个表达式,为右值52:rhs是一个非引用的参数,所以需要进行拷贝初始化,依赖于实参的类型,拷贝初始化要么使用拷贝构造函数要么使用移动构造函数,左值被拷贝,右值被移动hp的第一个赋值中,右侧为左值,需要进行拷贝初始化,分配一个新的string,并拷贝hp2所指向的stringhp的第二个赋值中,直接调用std::m原创 2017-03-11 09:32:31 · 4238 阅读 · 19 评论 -
C++Primer第五版 第十五章习题答案(1~10)
1:知识点1:面向对象程序设计的三个基本概念:数据抽象、继承和动态绑定(核心概念)数据抽象:将类的接口与实现分离继承:我们可以定义与其他类相似但完全不相同的新类动态绑定:在使用这些彼此相似的类时,在一定程度上忽略他们的区别,统一使用它们的对象知识点2:类的继承构成一种层次关系,在层次根部的为基类,其他类则直接或者间接的从基类中继承而来,称为派生类基类负责定义在层次关系中所有类共原创 2017-03-11 09:33:43 · 7189 阅读 · 6 评论 -
C++Primer第五版 第十三章习题答案(31~40)
31:#include #include#include#includeusing namespace std;class Hasptr1{ friend void swap(Hasptr1&,Hasptr1&); friend bool operator<(const Hasptr1& s1,const Hasptr1& s2); friend void show(ve原创 2017-03-10 09:34:19 · 8144 阅读 · 19 评论 -
C++Primer第五版 第十三章习题答案(41~50)
41:就是前置先加后用,后置先用后加,first_free指向的是一个空位置,前置的话会跳过一个空位置。42:本章所实现的StrVec类属于简化版本的容器类,只适用于string,运行时可动态分配内存的大小43:使用for_each和lambda表达式可能会更好一点,无需循环,语义更加明显 void free() { if (elements) {//原创 2017-03-10 09:36:04 · 6464 阅读 · 8 评论 -
C++Primer第五版 第十三章习题答案(21~30)
21:知识点:判断一个类是否需要拷贝控制函数成员,首先判断其是否需要自定义版本的析构函数,如果需要,则拷贝控制成员函数都需要。由于这两个类中的指针为智能指针,可以自动控制内存的释放,所以使用类的合成析构函数即可。另外类默认的拷贝控制成员对于智能指针的拷贝也不需要自定义版本来修改,所以全部定义为 =default 即可22:知识点1:管理类外资源的类必须定义拷贝控制成员知识点2:原创 2017-03-07 10:00:29 · 7683 阅读 · 33 评论 -
C++Primer第五版 第十二章习题答案(31~33)
31:知识点:vector相对于set的最主要区别就是set中的元素是自动排序的32:进行类型替换即可33:ResultIter begin() const { return nos->begin(); }ResultIter end() const { return nos->end(); }shared_ptr get_file() const { return原创 2017-03-06 09:45:08 · 3394 阅读 · 3 评论 -
C++Primer第五版 第十三章习题答案(1~10)
1:知识点1:在定义一个类时,我们可以显式或隐式的定义在此类型的对象拷贝、赋值、移动、销毁是做什么,主要通过五种特殊的成员函数来完成这些操作:拷贝构造函数、拷贝复制运算符、移动构造函数、移动复制运算符。析构函数知识点2:拷贝和移动构造函数定义了当用同类型的一个对象初始化本对象时做什么。拷贝和移动赋值运算符定义了将一个对象赋予同类型的另一个对象时做什么。析构函数定义了当此类型对象销毁时的操作原创 2017-03-06 09:45:40 · 10272 阅读 · 19 评论 -
C++Primer第五版 第十三章习题答案(11~20)
11:构造函数中,分配的动态内存对象,需要delete ~HasPtr() { delete ps; }//必须首先delete对象ps,ps指向一个动态分配的string12:知识点:当指向一个对象的引用或者指针离开作用域是,析构函数并不会执行析构函数执行三次:accum,item1,item213:#include #include #include原创 2017-03-06 09:46:26 · 8269 阅读 · 23 评论 -
C++Primer第五版 第十二章习题答案(11~20)
11:知识点1:理解变量的销毁与其内存的释放之间的关系:内置类型的指针在离开作用域时,本身会被销毁,但是其指向的内存空间什么都不会发生,必须以显式的delete进行释放空间。智能指针在离开作用域时,本身也会被销毁,并且计数器减一,当其计数器为0且只有一个智能指针指向该对象时,该对象的内存空间会被释放。如若用智能指针的get()函数得到的一个内置指针来初始化一个临时的智能指针,一旦该内置指针被释放,原创 2017-03-05 09:43:12 · 10256 阅读 · 42 评论 -
C++Primer第五版 第十二章习题答案(21~30)
21:将合法性检查与元素获取的返回语句分离开来,代码更清晰易读,当执行到第二条语句时,已确保p是存在的vector,curr是合法的位置,可安全地获取元素并返回。这种清晰的结构也更有利于修改不同的处理逻辑。22:将构造函数定义为const即可23:知识点1:大多数的应用应该使用标准库容器,而不是使用动态分配的数组知识点2:用new分配的动态数组会返回一个元素类型的指针,原创 2017-03-05 09:44:45 · 8081 阅读 · 24 评论 -
C++Primer第五版 第十二章习题答案(1~10)
1:知识点1:对象生命周期:全局对象在程序启动时分配,在程序结束时销毁。局部自动对象,当我们进入其定义所在程序块时被创建,在离开块时被销毁。局部static对象在第一次使用前分配,在程序结束时销毁知识点2:除了static和自动对象外,C++还支持动态对象的分配。动态分配的对象的生存期与它们在哪里创建无关,只有被显示的释放时,这些对象才会被销毁知识点3:动态对象的释放是编程中极其容易出问题原创 2017-03-03 09:45:58 · 12185 阅读 · 35 评论 -
C++Primer第五版 第十一章习题答案(21~30)
21:知识点1:向map中添加元素,元素的类型必须是pair,但是并没有现成的pair元素,所以需要在insert()的参数列表中创建一个pairfamilyy.insert({"dsa","das"});//c++11支持familyy.insert (pair("asd","das"));//显示创建一个pairfamilyy.insert(make_pair("de","1"));/原创 2017-03-02 09:33:06 · 6180 阅读 · 11 评论 -
C++Primer第五版 第十一章习题答案(31~38)
31:知识点:在multimap中,具有相同关键字的元素会相邻存储#include #include #include#include#include #include #include#include//ctype无法打开,包含tolower()函数和ispunct函数#include#include//保存pair的头文件using namespace std;原创 2017-03-02 09:34:30 · 6072 阅读 · 17 评论 -
C++Primer第五版 第十一章习题答案(1~10)
1:知识点1:关联容器与顺序容器有着根本的不同知识点2:关联容器的元素是按关键词来保存和访问的,顺序容器是按他们在容器中的位置来顺序访问知识点3:关键词在关联容器中起到重要的作用,map中的元素是(关键字—值)对,关键词是索引左右,值是与索引相关联的数据。set每个元素只包含一个关键字,支持高效的关键词查找知识点4:标准库提供8个关联容器,主要是map/set,是否重复关键字,顺序保存原创 2017-03-01 09:31:25 · 10990 阅读 · 32 评论 -
C++Primer第五版 第十一章习题答案(11~20)
11:知识点:当我们使用decltype作用于某个函数时,它返回函数类型而非指针类型,因此我们需要显示的加上*已表明我们需要返回指针。作用:选择并返回操作数的类型,若为函数,则类型为函数的返回类型using compareType = bool (*)(const Sales_data& lhs, const Sales_data& rhs);//使用using来代替函数类型12:原创 2017-03-01 09:33:17 · 9012 阅读 · 43 评论 -
C++Primer第五版 第九章习题答案(51~52)
51:知识点:综合利用了之前的string的各项额外操作#include#include#include#include#include#includeusing namespace std;class Date{public://class默认是私有继承,记得要加public unsigned _year; unsigned _month; unsigned _da原创 2017-02-26 09:37:06 · 5425 阅读 · 27 评论 -
C++Primer第五版 第十章习题答案(1~10)
1:知识点:泛型算法:算法是因为其实现了一些经典算法的公共接口,排序和搜索。泛型是因为他们可以作用于不同类型的元素和多种容器类型甚至是内置数组。故称泛型算法知识点2:基本上都定义在algorithm和numeric两个头文件中知识点3:这些算法一般情况下只作用于迭代器之上,不对容器进行直接操作#include#include#include#includeusing names原创 2017-02-26 09:38:21 · 10926 阅读 · 19 评论 -
C++Primer第五版 第十章习题答案(21~30)
21:知识点1:值捕获想修改变量的话,可以在参数列表后加mutable进行修改。引用捕获也必须是非const的变量才可以进行修改。知识点2:若不明显指出返回类型,需要在参数列表之后位置返回类型:->bool。#include#include#include#include#includeusing namespace std;int main(int argc, char原创 2017-02-27 09:32:07 · 7608 阅读 · 26 评论 -
C++Primer第五版 第十章习题答案(11~20)
11:知识点:很多算法在默认情况下都会使用元素类型的#include#include#include#include#includeusing namespace std;void elimDups(vector &s){ cout<<"排序前:"; for (int i = 0; i<s.size(); ++i) { cout<<s[i]<<" "; } cou原创 2017-02-27 09:30:49 · 7995 阅读 · 16 评论 -
C++Primer第五版 第十章习题答案(31~40)
31:知识点:unique_copy()去掉了重复元素#include #include#include #include #include #include #include#includeusing namespace std;using namespace placeholders;//占位符的命名空间int main(int argc, char**ar原创 2017-02-28 09:37:18 · 5805 阅读 · 12 评论