
《Accelerated C++》笔记
captxb
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
chapter15_再探字符图形
纯虚函数和抽象基类 纯虚函数:virtual修饰的函数的函数体 = 0 class Pic_base { private: typedef std::vector<std::string>::size_type ht_sz; typedef std::string::size_type wd_sz; [[nodiscard]] virtual...原创 2019-11-16 18:10:47 · 253 阅读 · 1 评论 -
chapter14_近乎自动地管理内存
使用指针常常出现的问题 复制一个指针不会导致对指针所指对象的复制,但是会让两个指针指向同一个对象 删除一个指针不会释放指针所指对象的内存 删除一个对象但是没有删除指向该对象的指针,会产生一个空悬指针 定义一个指针却没有初始化 一个通用的句柄类 目标 (1) 这个Handle类是通用的,因此应该使用template (2) Handle对象复制内存管理 (3) 通过H...原创 2019-11-16 11:57:29 · 170 阅读 · 0 评论 -
chapter13_使用继承与动态绑定
继承 示例 class Grad : public Core { ... } 继承方式 继承方式/基类成员 public成员 protected成员 private成员 public继承 public protected 不可见 protected继承 protected protected 不可见 private继承 private priva...原创 2019-11-15 22:01:40 · 199 阅读 · 0 评论 -
附录B_标准库一览
输入输出流迭代器 istream_iterator<T> in(is); ostream_iterator<T> out(os, const char* sep = " ");原创 2019-11-15 10:40:01 · 183 阅读 · 0 评论 -
附录A_C++语法细节
const int* const pa = &a; const 修饰的是紧跟在后面的东西: 第一个const修饰int,代表指针指向的int值不能变; 第二个const修饰pa,代表指针(也就是地址)不能变。 C++允许对一个名字重复声明,但是只能定义一次 volatile 告诉编译器,这个变量可以以语言定义以外的方式改变,编译器不能对变量进行强制性的优化 register...原创 2019-11-15 10:32:54 · 231 阅读 · 0 评论 -
chapter12_使类对象像一个数值一样工作
一般来说,类的“三位一体”原则:构造函数、复制构造函数、析构函数、赋值运算符函数。 如果一个类不需要显式定义析构函数(析构函数什么都不需要干),那么它往往也不需要显式定义赋值构造函数和赋值运算符函数。 输入输出运算符重载 目标 希望实现自定义类和基本类型一样,可以被 cin >> 和 cout << 对于二元运算符,左操作数必然为函数的第一个参数,右操作数必...原创 2019-11-14 21:43:41 · 151 阅读 · 0 评论 -
chapter11_定义抽象数据类型
explicit 关键字 示例 template<typename T> class Vec { public: Vec(); explicit Vec(std::string::size_type n, const T &val = T()); ... } explicit 只对构造函数起作用,用于抑制隐式转换 Vec<...原创 2019-11-14 19:53:52 · 210 阅读 · 0 评论 -
chapter10_管理内存和低级数据结构
指针 是一个存放对象地址的值,既可以指向一个对象,还可以指向一个函数 对一个函数所能做的操作只有2种 调用函数 获取它的地址 函数指针 示例 void f(int a, int b); // 声明了一个函数指针,名字叫fp,指向的函数类型是两个int参数、void返回值的函数 void (*fp)(int, int); 由于对函数的操作只...原创 2019-11-14 10:35:07 · 120 阅读 · 0 评论 -
chapter9_定义新类型
C++的类型分为:内部类型 + 自定义类型 C++的一种设计思想:应该让程序员创建跟内部类型一样易于使用的类型 一个良好的编程习惯: 头文件中使用限定名 (std::xxx),源文件包含适当的using 类的成员函数 对于类的成员函数,总是有一个隐含参数,就是正在由我们操作的对象 常量成员函数 示例 struct Student_info { ...原创 2019-11-13 19:22:40 · 175 阅读 · 0 评论 -
chapter8_编写泛型函数
示例 template<class T> T median(std::vector<T> v) { typedef typename std::vector<T>::size_type vec_sz; vec_sz size = v.size(); std::sort(v.begin(), v.end()); ...原创 2019-11-13 17:05:57 · 133 阅读 · 0 评论 -
chapter7_使用关联容器
map<k, v> 对映射表map中一个不存在的元素的访问,会创建一个元素,此元素值为 v(); 对于基本类型,v初始化为0; 对于类,进行数值初始化v() pair类型 当间接引用一个映射表迭代器时,获得的就是和这个映射表关联的一个 pair 类型的值; 对于 map<k, v>,pair的类型是 pair<const k, v>,键值不得被修改 ...原创 2019-11-13 15:33:05 · 105 阅读 · 0 评论 -
chapter6_使用库算法
容器、迭代器、算法,都使用了一致的接口协定 库算法主要在<algorithm>头文件中 copy算法 copy(begin, end, out); 把区间[begin, end)的所有元素复制到一连串从out开始的元素中 正确的用法示例是 std::copy(bottom.begin(), bottom.end(), std::back_inserter(ret)...原创 2019-11-13 10:40:12 · 167 阅读 · 0 评论 -
chapter5_使用顺序容器并分析字符串
迭代器 一个迭代器是一个值,它能够 (1) 识别一个容器以及容器中的一个元素 (2) 检查存储在这个元素中的值 (3) 提供操作来移动在容器中的元素 (4) 采用对应于容器所能够有效处理的方式来对可用的操作进行约束 迭代器类型 (1) container-type::const_iterator – 只读迭代器 (2) container-type::iterator – 可读可写迭代...原创 2019-11-12 22:41:36 · 120 阅读 · 0 评论 -
chapter4_组织程序和数据
异常也是一个类 class exception { ... } class logic_error : public exception { ... } class domain_error : public logic_error { ... } 引用 std::vector<int> a; // 原始变量 s...原创 2019-11-12 21:19:56 · 138 阅读 · 0 评论 -
chapter3_使用批量数据
缺省初始化 对于自定义类型的对象,如果我们没有指定一个初始化程序的话,那么类会自己指定一个 对于基本类型,在创建变量时,系统会给这些变量分配适当的内存单元,变量值由这些单元的随机信息组成 因此,缺省初始化不靠谱!!!正确的做法是类定义默认构造函数,基本类型手动初始化,这个和Java不一样 typedef 示例 typedef std::vector<double&g...原创 2019-11-12 16:28:25 · 116 阅读 · 0 评论 -
chapter2_循环和计算
const std::string::size_type cols = 100; 解析: std::string 是一个类 typedef basic_string<char> string; size_type 是一种 basic_string 类定义的类型 class basic_string { ... // Types: ...原创 2019-11-12 15:43:50 · 112 阅读 · 0 评论 -
chapter1_使用字符串
变量 != 对象 变量是一个具有名称的对象; 对象是计算机中一段具有类型的内存空间 std::cin >> name;操作 略去输入开始时的空白字符,读取直到再次碰到空白字符 缓冲区 缓冲区用于优化输出 3种情况下会刷新flush缓冲区 (1) 缓冲区已满 (2) 请求库从标准输入流中读数据 (3) 强制刷新(例如std::endl就会强制刷新) 适当的时刻刷新...原创 2019-11-12 15:19:27 · 123 阅读 · 0 评论 -
chapter0_开始学习C++
语言核心 != 标准库 语言核心:所有C++程序可用 标准库:某个部分(例如#include <iostream>) 作用域 命名空间 相关名称的集合 花括号 std::cout << “Hello World” << std::endl; 分析 表达式会让编译器进行运算,运算会产生结果,有可能产生副作用 这句话的副作用就是把Hell...原创 2019-11-12 10:05:02 · 102 阅读 · 0 评论