Accelerated C++
最近读了Accelerated C++,做一下整理笔记
第0章 入门
1. 如果要使用头文件中的人和名字,需要提前#include;
2. return 0表示成功;
第三章 使用批量数据
1. 对于类的对象来说,类自己会说明如果没有指定初始化的值会如何初始化,如string会初始化为空字符串;然而其他的没有显式初始化的内置类型的局部变量是不明确的,可能是变量创建时所占内存刚好含有的值;
2. 输出double类型的精度可以使用setprecision来控制输出的小数位数;
3. 比如vector.size()这种类型的变量,因为不同的系统可能会定义出不同的类型,因此使用标准库定义的size_type来表示容器的大小是一个良好的习惯做法,我们也应该使用它来定义容器的大小;
4. 定义了homework这个vector类型的变量之后,可以使用sort(homework.begin(),homework.end())来对其进行排序;
5.不管什么时候,如果一个表达式中同时出现了普通的整数和无符号类型的整数,普通的整数都会被转换成无符号类型。因此表达式homework.size()-100会生成一个无符号类型的结果,也就是说它永远都不会比0小;
第四章 组织程序和数据
1. 传值调用法,向函数的形参传递实参的数值,形参将会是实参的拷贝;
2. 引用调用法,通过向函数传递引用进行传递,这种做法直接使用实参的数值,不拷贝;另一方面,如果不想改变实参的数值,可以使用const &引用,需要注意的是:
如果我们定义了一个非const类型的引用,就不能让它指向一个常量对象或者常量引用,因为这样做会违反const的意思。
因此不能给非常量引用的形参传递常量引用,但是可以给常量形参传递非常量引用;
3. 如果结构体类型的容器,调用sort,是不知道你进行比较的是结构体中的那个元成员的,因此可以单独实现comare类型的谓词,在谓词中对结构体的成员进行比较,返回比较的结果,这样再对容器进行sort时,第三个变量传入这个谓词,即可实现针对某一成员的比较如:
bool compare(const Student_info& x, const Student_info& y){ return x.name<y.name;} //实现由小到大的排序
sort(students.begin(),students.end(),compare)
4. 当我们在#include 指令中使用一对双引号,而不是尖括号,来把头文件名字包括起来,这样做的意思是,要求编译器把这个头文件的全部内容复制到程序中#include所在的地方;
5. 头文件应当只声明那些必要的名字,通过限定头文件中的名字,我们可以为用户提供最大的灵活性。如果在头文件中写了using std::vector的声明,那么包含头文件的所有程序都会有这样的声明,不管它们是否需要,因此头文件应当使用完整的经过限定的名字,而不是使用using声明;
6. 一个好习惯:作为编译程序的一部分,头文件需要确保多次包含一个头文件是安全的,方法就是在.h的声明的开始和结束处加入#ifndef #endif
7. 在源文件中,使用using声明没有什么问题。
8. 函数名可以重载。只要函数的参数个数或类型不同,同一个函数名function-name就可以定义多个函数,系统可以区分相同类型的引用和常量引用。
第五章 使用序列式容器并分析字符串
1. 迭代器是一个值,它能够
a. 标识一个容器和容器的一个元素
b. 允许检测元素中保存的值;
c. 提供在容器元素之间移动的操作;
d. 使用容器可用有效处理的方式来约束可用的操作;
2. 迭代器,我的理解实际上就是容器中的一个元素的指针。如:vector<Student_info>::const_vector iter = students.begin();
3. 通过对迭代器进行*解引用,如 *iter.name, iter->name可以访问该元素的变量;
4. 可以用过对迭代器进行使用,取代索引;对迭代器的直接++可以指向下一个元素;
5. vector 容器是数组类型的,可以随机索引,缺点是插入和删除很慢,因为需要移动所有的元素;
当从vector中删除一个元素时,指向被删除元素和它之后所有元素的迭代器就都失效了,而push back会使所有的都失效。因为从vector中删除一个元素会移动后面的所有元素,而push back会引起整体vector的重新分配。因此,使用vector类型的begin end,如果调用了push back之类的,需要格外的小心迭代器的失效问题。
list容器是链表类型的,不能随机索引,但是可以随机的插入删除。
由于list不支持随机访问,因此无法使用标准库sort对list进行排序,但是list中有自己的sort成员函数。
第八章 编写反泛型函数
1. 实现泛型函数的语言特性叫做模板函数
template <typename T>
inline T const& Max (T const& a, T const& b)
{ return a < b ? b:a;
}
2. 如果你使用一个依赖于模板参数的类型,如vector<T>,而且你想要使用这个类型的成员时,比如size_type,它本身也是一个类型时,你必须在整个名字之前加上type_name,以便让系统知道要把这个名字当作一个类型来对待。即如:
typedef typename vector<T>::size_type vec_sz;
vec_sz size = v.size();
3. 迭代器:C++标准库中的一个重要贡献是,通过把迭代器用作算法和容器之间的粘合剂,算法可以获得数据结构的独立性,此外,算法使用的迭代器都要求支持某些操作,这样我们就可以根据这些操作来分解算法,这就意味着,我们很容易把一个容器和能够在这个容器上使用的算法匹配起来。
迭代器分为五种: 输入迭代器,输出迭代器,前向迭代器,双向迭代器,随机访问迭代器。
vector和string的迭代器都是随机访问迭代器,因为都可以要求随机访问,list类型是双向的,只能顺序递增递减。
Accelerated C++相关推荐
- 深度学习优化函数详解(5)-- Nesterov accelerated gradient (NAG) 优化算法
深度学习优化函数详解系列目录 深度学习优化函数详解(0)– 线性回归问题 深度学习优化函数详解(1)– Gradient Descent 梯度下降法 深度学习优化函数详解(2)– SGD 随机梯度下降 ...
- 比Momentum更快:揭开Nesterov Accelerated Gradient的真面目NAG 梯度下降
d为累计梯度 作为一个调参狗,每天用着深度学习框架提供的各种优化算法如Momentum.AdaDelta.Adam等,却对其中的原理不甚清楚,这样和一条咸鱼有什么分别!(误)但是我又懒得花太多时间去看 ...
- OpenCV中的快速特征检测——FAST(Features from Accelerated Segment Test)
OpenCV中的快速特征检测--FAST(Features from Accelerated Segment Test) 1. 效果图 2. 源码 参考 OpenCV中的尺度不变特征变换(SIFT S ...
- 【Accelerated C++】重点回顾(续)
看了刘未鹏推荐过的C++入门经典<Accelerated C++>,读此书的过程中一再感叹"大师就是大师,他可以很轻松的把东西的本质呈现在你面前",这本书采用了现实中与 ...
- 【Accelerated C++】重点回顾
看了刘未鹏推荐过的C++入门经典<Accelerated C++>,读此书的过程中一再感叹"大师就是大师,他可以很轻松的把东西的本质呈现在你面前",这本书采用了现实中与 ...
- 28,29_激活函数与GPU加速、Tanh和sigmoid、ReLU、Leaky ReLU、SELU、Softplus、GPU accelerated、案例、argmax
1.24.激活函数与GPU加速 关于激活函数的图形(Tanh和sigmoid的图形形状如下): ReLU的形状如下: Leaky ReLU的激活函数如下: SELU的图形如下: Softplus的形状 ...
- TensorFlow第八步 Nesterov's accelerated gradient descent+L2 regularization
L2 regularization: C=C0+lambda/n/2*sum(w^2) Nesterov's accelerated gradient descent https://blog.csd ...
- Accelerated C++ Chapter4.1 用函数来计算学生成绩
最近在自学C++,在看斯坦福推荐的一本C++教材(没有核实是不是真的斯坦福推荐的,也是某乎上看到的,然后就买了书跟着敲代码) Learner:JC 书名:Accelerated C++: Practi ...
- Accelerated C++ 习题答案
1. 在google的groups,也就是http://groups.google.com里发现很多人在讨论这本书中个别题的答案.如果你想要某一道题的答案,就在那搜Accelerated C++ ex ...
- survival | 生存分析(5):加速失效时间模型(Accelerated Failure Time Model)
本篇来介绍另外一种生存模型:加速失效时间模型(Accelerated Failure Time Model,AFT模型).AFT模型是对生存时间进行建模的.它常使用在工业领域,如研究零件寿命受温度的影 ...
最新文章
- R语言使用scales包的hue_pal函数获取ggplot2任何级别的离散色码、使用scales包的hue_pal函数获取ggplot2任何级别的反序(reverse)离散色码
- bzoj 3505: [Cqoi2014]数三角形
- Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)
- pythonunicode转为字符串_python中将 \\uxxxx转换为 Unicode字符串
- HDOJ 4253 Two Famous Companies 二分+MST
- Aruba 推出Instant On 为中小型企业提供安全、高速的无线连接
- Centos7 安装 Python3.9
- C51单片机————总线与系统扩展
- 小巧票据打印软件免费下载
- 【论文阅读】中医类药性分析:使用机器学习方法预测类药性
- gocron mysql_[日常] gocron源码阅读-使用go mod管理依赖源码启动gocron
- Windows无法访问 请检查名称的拼写。否则,网络可能有问题...错误代码:0x80004005
- 500分能上的计算机院校,高考500分上下怎么选大学?推荐这几所学校
- redis 过期策略
- 基于jquery实现table内部数据排序
- 软件工程专插本_2021年软件工程专业-编译原理-考试大纲(专插本).docx
- php 实心圆,Android利用drawable-xml自定义实心圆和空心圆
- python画玫瑰花带名字_Python 画一朵玫瑰给你
- .NET ——FCL、BCL、CTS、CLS
- bloom filter与dawgdic(一种trie树)