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 · 191 阅读 · 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 · 112 阅读 · 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 · 115 阅读 · 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 · 200 阅读 · 0 评论 -
第 15 章 面向对象程序设计
练习 15.1:原创 2021-11-27 18:08:33 · 212 阅读 · 0 评论 -
第 14 章 操作符重载与类型转换
练习 14.1: 区别: 如果一个运算符函数是成员函数,则它的第一个运算对象绑定到隐式的this指针上,因此,成员运算符函数的参数数量比运算符的运算对象总数少一个。 重载运算符函数,或者是类的成员,或者至少含有一个类类型的参数。 重载运算符不保证运算对象的求值顺序,例如对&&和||的重载版本不再具有“短路求值”的特性,两个操作数都要求值,而且不规定操作数的求值顺序。 相同点: 重载运算符与对应的内置操作符具有相同的优先级和结合律。 练习 14.2: #ifndef EX14_原创 2021-11-23 13:05:55 · 176 阅读 · 0 评论 -
第 13 章 拷贝控制
练习 13.1: 如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数; 使用=定义变量 将一个对象作为实参传递给一个非引用类型的形参 从一个返回类型为非引用的函数返回一个对象 用花括号列表初始化一个数组中的元素或一个聚合类中的成员 某些类类型还会对它们所分配的对象使用拷贝初始化。 练习 13.2: 拷贝构造函数自己的参数必须是引用类型。如果其参数不是引用类型,则调用永远也不会成功——为了调用拷贝构造函数,我们必须...原创 2021-11-21 15:36:20 · 301 阅读 · 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 · 78 阅读 · 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 · 67 阅读 · 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 · 698 阅读 · 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 · 73 阅读 · 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 · 71 阅读 · 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 · 131 阅读 · 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 · 130 阅读 · 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 · 380 阅读 · 0 评论 -
第 4 章 表达式
练习 练习4.6: i % 2 == 0 ? "even" : "odd"; 练习4.7: 当计算的结果超出该类型所能表示的范围就会产生溢出: short svalue = 32767; ++svalue; // -32768 int ivalue = 2147483647; ++ivalue; // -2147483648 unsigned uivalue = 0; --uivalue; // 4294967295 练习4.8: 逻辑与运算符和OR运算符总是...原创 2021-11-05 11:31:19 · 145 阅读 · 0 评论 -
第3章 字符串、向量和数组
目录 3.1 命名空间的using声明 3.2 标准库类型string 3.2.1 定义和初始化string对象 3.2.2 string对象上的操作 3.2.3 处理string对象中的字符 3.3 标准库类型vector 3.3.1 定义和初始化vector 3.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 · 124 阅读 · 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 指针和const 2.4.3 顶层const 2.4.4 constexpr和常量表达式 2.5 处理类原创 2021-11-03 20:45:02 · 578 阅读 · 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 · 257 阅读 · 0 评论