第一部分 编程基础
这一部分主要是讲解基础语法,算术、逻辑运算,顺序、条件、循环流程控制语句,函数。对于已有编程基础的人来说不是很难,简单记录下有涉及到新标准和三方工具库的位置。
3.12 使用了开源的BigNumber类来处理任意精度的整数存取。
3.13 介绍了C++20新标准中将引入的format库来实现字符串格式化功能,对应的开源实现fmt库,并在4.14节中介绍了使用其输出格式化浮点数的方法。
int main() {
double rate{0.05};
cout << format(" Interest rate : {:>7.2f}\n", rate);
}
4.13 节介绍了使用三方开源库miniz-cpp来读写zip文件的案例。
5.6.3 节介绍了“准则支持库GSL”,推荐使用narrow_cast来进行显式的收缩转换。
5.8 节介绍了C++11支持的随机数生成功能,使用到了标准库<random>, 介绍了随机数生成引擎,分布,随机数种子。
5.9 节介绍了C++11新增的有作用域的enum,可以使用枚举类名和作用域解析操作符来限定要访问的常量。C++20加入的using enum声明,可以省略使用时的枚举类名。
enum class Status {
keepRolling,
win,
lost
};
using enum Status;
using Status::keepRolling;
5.15 函数重载,签名是函数名称及其参数类型(按顺序)的组合。 6.5 介绍了C++17中的类模版实参推导(Class Template Argument Deduction, CTAD)
std::array values{1.1, 2.2, 3.3, 4.4};
6.6 介绍了C++20带初始化器的范围for语句。
6.12 介绍了标准库的sort和binary_search函数。
6.14 介绍了“函数式编程”的概念,这一章值得多回顾下。
6.14.2 提及了C++14的泛型lambda
[](const auto &x, const auto &y){return x * y};
6.14.3 介绍了C++20的<ranges>库。
“范围”是可供便利的元素的一个集合。
“视图”是一组可指定的操作,用以处理一个范围。视图的操作组合是“懒求值”(lazy evaluation)的,所以并不是需要完全处理整个数据源,而是在使用过程中,逐个处理,比如说有1000个数据,只需要前10个,则view的实际处理只会进行10次。
auto isPrime = [](const auto &n) {
if(n <= 1)
return true;
for(int i = 2; i <= std::sqrt(n); ++i) {
if(n % i == 0)
return false;
}
return true;
};
auto add_one = [](const auto &n) {
return n + 1;
};
auto mView {std::views::iota(1, 1000000000)
| std::views::filter(isPrime)
| std::views::transform(add_one) };
auto it = mView.begin();
for(auto i : std::views::iota(0, 10)) {
std::cout << it++ << std::endl;
}