C++ Primer 第5版 学习笔记
文章平均质量分 73
++Z++
这个作者很懒,什么都没留下…
展开
-
第 19 章 特殊工具与技术
练习 19.1:#include<iostream>#include<cstdlib>using namespace std;void* operator new(size_t size){ if (void* mem = malloc(size)) { cout << "operator new" << endl; return mem; } else throw bad_alloc();}void operator原创 2021-12-11 17:09:16 · 198 阅读 · 0 评论 -
第 18 章 用于大型程序的工具
练习 18.1:(a):异常对象的类型是range_error。(b):异常对象的类型是exception。如果将(b)中的throw语句写成throw p,将会出现运行时错误。throw *p被抛出的异常对象是对指针p解引用的结果。若写成throw p,则抛出的异常对象是exception*类型。练习 18.2:指针p不会被释放,造成内存泄漏。练习 18.3:class intArray{public: intArray(size_t n): p(new int[n]) {原创 2021-12-10 09:47:55 · 120 阅读 · 0 评论 -
第 17 章 标准库特殊设施
练习 17.1:tuple<int, int, int> threeInt( 10,20,30 );练习 17.2:tuple<string, vector<string>, pair<string, int>> t;练习 17.3:#ifndef EX17_3_H#define EX17_3_H#include<iostream>#include<fstream>#include<vector原创 2021-12-08 15:58:06 · 121 阅读 · 0 评论 -
第 16 章 模板与泛型编程
练习 16.1:编译器处理过程,用实际的模板实参来生成模板的一个特殊实例,其中参数被替换为对应的实参。练习 16.2:#include<iostream>#include<functional>#include<cstring>using namespace std;template<typename T>int compare(const T& v1, const T& v2){ if (less<T>原创 2021-12-02 22:21:23 · 204 阅读 · 0 评论 -
第 15 章 面向对象程序设计
练习 15.1:原创 2021-11-27 18:08:33 · 219 阅读 · 0 评论 -
第 14 章 操作符重载与类型转换
练习 14.1:区别:如果一个运算符函数是成员函数,则它的第一个运算对象绑定到隐式的this指针上,因此,成员运算符函数的参数数量比运算符的运算对象总数少一个。 重载运算符函数,或者是类的成员,或者至少含有一个类类型的参数。 重载运算符不保证运算对象的求值顺序,例如对&&和||的重载版本不再具有“短路求值”的特性,两个操作数都要求值,而且不规定操作数的求值顺序。相同点:重载运算符与对应的内置操作符具有相同的优先级和结合律。练习 14.2:#ifndef EX14_原创 2021-11-23 13:05:55 · 183 阅读 · 0 评论 -
第 13 章 拷贝控制
练习 13.1:如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数;使用=定义变量 将一个对象作为实参传递给一个非引用类型的形参 从一个返回类型为非引用的函数返回一个对象 用花括号列表初始化一个数组中的元素或一个聚合类中的成员 某些类类型还会对它们所分配的对象使用拷贝初始化。练习 13.2:拷贝构造函数自己的参数必须是引用类型。如果其参数不是引用类型,则调用永远也不会成功——为了调用拷贝构造函数,我们必须...原创 2021-11-21 15:36:20 · 306 阅读 · 0 评论 -
第 12 章 动态内存
练习 12.1:b1和b2共享一个StrBlob对象,b2被销毁,但b2中的元素没有被销毁,所以他们都有4个元素;练习 12.2:#include<iostream>#include<string>#include<vector>#include<memory>#include<initializer_list>using namespace std;class StrBlob{public: typedef ve原创 2021-11-17 20:30:11 · 84 阅读 · 0 评论 -
第 11 章 关联容器
练习 11.1:map是关键字-值对的集合。我们可以通过关键字有效地查找值。 vector是对象的集合,每个对象都有一个关联的索引,该索引允许访问该对象。练习 11.2:list: 一个待办事项清单。总是需要在任何地方插入或删除元素。 vector:保存一些重要的关联数据,总是需要按索引查询元素。 deque:消息处理。FIFO。 map:字典。 set:空头支票。练习 11.3#include<iostream>#include<string>...原创 2021-11-16 09:55:16 · 75 阅读 · 0 评论 -
第 10 章 泛型算法
练习 10.1 && 练习 10.2#include<iostream>#include<vector>#include<list>#include<algorithm>using namespace std;int main(){ vector<int> iv = { 3,2,3,4,3,5 }; cout << count(iv.begin(), iv.end(), 3) << e原创 2021-11-15 11:23:23 · 707 阅读 · 0 评论 -
第 9 章 顺序容器
练习 9.1:(a)list较好,涉及到可能在中间插入的操作(b)deque较好,因为涉及到在头部删除,末尾插入的操作,都是在两端进行。(c)vector较好,没有更好的选择。练习 9.2:list<deque<int>> l练习 9.3:迭代器begin和end必须指向相同的容器。end可以与begin指向相同的位置,但不能指向begin之前的位置。练习 9.4:#include<iostream>#inc...原创 2021-11-13 22:18:30 · 78 阅读 · 0 评论 -
第 8 章 IO类
练习8.1 && 练习8.2:#include<iostream>#include<string>using namespace std;istream& func(istream& is){ string str; while (is >> str) cout << str << endl; is.clear(); return is;}int main() { istream原创 2021-11-08 22:54:49 · 76 阅读 · 0 评论 -
第 7 章 类
练习7.1:#include<iostream>#include<string>using namespace std; // Sale_data类struct Sale_data{ string bookNo; unsigned units_sold = 0; double revenue = 0.0; void AddData(Sale_data data); void SetData(Sale_data data);原创 2021-11-08 17:11:54 · 138 阅读 · 0 评论 -
第 6 章 函数
练习6.1:形参:在函数形参表中声明的局部变量。它们由每个函数调用中提供的参数初始化。实数:函数调用中提供的值,用于初始化函数的形参。练习6.2:// (a)string f() { string s; // ... return s;}// (b)void f2(int i) { /* ... */ }// (c)int calc(int v1, int v2) { /* ... */ }// (d)double square(double x) {原创 2021-11-06 17:47:25 · 135 阅读 · 0 评论 -
第 5 章 语句
练习练习5.4:// iter指向nullptr,无效。while (string::iterator iter != s.end()) { /* . . . */ }// 正确:string::iterator iter = s.begin();while (iter != s.end()) { /* . . . */ }// if语句不在while语句块中,所以status是无效的。while (bool status = find(word)) { /* . . . */ }原创 2021-11-05 16:52:00 · 388 阅读 · 0 评论 -
第 4 章 表达式
练习练习4.6:i % 2 == 0 ? "even" : "odd";练习4.7: 当计算的结果超出该类型所能表示的范围就会产生溢出:short svalue = 32767; ++svalue; // -32768int ivalue = 2147483647; ++ivalue; // -2147483648unsigned uivalue = 0; --uivalue; // 4294967295练习4.8:逻辑与运算符和OR运算符总是...原创 2021-11-05 11:31:19 · 151 阅读 · 0 评论 -
第3章 字符串、向量和数组
目录3.1 命名空间的using声明3.2 标准库类型string3.2.1 定义和初始化string对象3.2.2 string对象上的操作3.2.3 处理string对象中的字符3.3 标准库类型vector3.3.1 定义和初始化vector3.3.2 向vector对象中添加元素3.3.3 其他vector操作3.4 迭代器介绍3.4.1 使用迭代器3.4.2 迭代器运算3.5 数组3.5.1 定义和初始化数组3.5.2 访问数组元素3原创 2021-11-04 17:13:45 · 130 阅读 · 0 评论 -
第2章 变量和基本类型
目录2.1 基本内置类型2.1.1 算数类型2.1.2 类型转换2.1.3 字面值常量2.2 变量2.2.1 变量的定义2.2.2 变量声明和定义的关系2.2.3 标识符2.2.4 名字的作用域2.3 复合类型2.3.1 引用2.3.2 指针2.3.3 理解复合类型的声明2.4 const 限定符2.4.1 const的引用2.4.2 指针和const2.4.3 顶层const2.4.4 constexpr和常量表达式2.5 处理类原创 2021-11-03 20:45:02 · 587 阅读 · 0 评论 -
第1章 开始
1.函数的定义:返回类型(return type)、函数名(function name)、形参列表(parameter,允许为空)和函数体(function body)。2.c++程序必须包含一个main函数。main函数的返回值必须为int。// int为返回类型,main为函数名,小括号包围的是可以为空的形参列表int main(){ // 大括号包围的是函数体 return 0; // 返回值}...原创 2021-11-03 09:27:43 · 265 阅读 · 0 评论