第 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
第 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]) {
第 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
第 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>
第 14 章 操作符重载与类型转换 练习 14.1:区别:如果一个运算符函数是成员函数,则它的第一个运算对象绑定到隐式的this指针上,因此,成员运算符函数的参数数量比运算符的运算对象总数少一个。 重载运算符函数,或者是类的成员,或者至少含有一个类类型的参数。 重载运算符不保证运算对象的求值顺序,例如对&&和||的重载版本不再具有“短路求值”的特性,两个操作数都要求值,而且不规定操作数的求值顺序。相同点:重载运算符与对应的内置操作符具有相同的优先级和结合律。练习 14.2:#ifndef EX14_
第 13 章 拷贝控制 练习 13.1:如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数;使用=定义变量 将一个对象作为实参传递给一个非引用类型的形参 从一个返回类型为非引用的函数返回一个对象 用花括号列表初始化一个数组中的元素或一个聚合类中的成员 某些类类型还会对它们所分配的对象使用拷贝初始化。练习 13.2:拷贝构造函数自己的参数必须是引用类型。如果其参数不是引用类型,则调用永远也不会成功——为了调用拷贝构造函数,我们必须...
第 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
第 11 章 关联容器 练习 11.1:map是关键字-值对的集合。我们可以通过关键字有效地查找值。 vector是对象的集合,每个对象都有一个关联的索引,该索引允许访问该对象。练习 11.2:list: 一个待办事项清单。总是需要在任何地方插入或删除元素。 vector:保存一些重要的关联数据,总是需要按索引查询元素。 deque:消息处理。FIFO。 map:字典。 set:空头支票。练习 11.3#include<iostream>#include<string>...
第 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
第 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...
第 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
第 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);
第 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) {
第 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)) { /* . . . */ }
第 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运算符总是...
第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
第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 处理类
第1章 开始 1.函数的定义:返回类型(return type)、函数名(function name)、形参列表(parameter,允许为空)和函数体(function body)。2.c++程序必须包含一个main函数。main函数的返回值必须为int。// int为返回类型,main为函数名,小括号包围的是可以为空的形参列表int main(){ // 大括号包围的是函数体 return 0; // 返回值}...