C++高性能并行编程与优化 - 课件 - 17 由浅入深学习 map 容器at(“key”) = val; // 写入键值为 “ key” 的元素,如果不存在,抛出异常 • 毕竟 [] 和 at() 只是返回引用,不管你是读取还是写入这个引用,函数本身的特性是不变的。 • 唯一的区别是等号在他后面,是往 K 对应的 V 里赋值。 • [] 创建在先, = 写入在后。成功写入了新建的元素。 • at 报错在先, = 写入在后。结果是报错了,没有写入。 • 所以 C++ 中写入元素,又得用 [] 才对, [] 在写入时又和多数语言的 [] 行为一致了。 • 这时 [] 自动默默创建的特性反而是个优点了,如果用了 at() 反而会在插入新键值时莫名 其妙报错。此外 [] 默默创建以后把值初始化为 0 的特性,由于调用者是 = val 赋值,所 以初始化也没用了,反正马上会写入 val 。 浅谈这种精分设计的原因 • 总结,要符合你熟悉的 Python auto &v = std::get<1>(tmp); https://www.youtube.com/watch?v=uQyT-5iWUow 没有语法糖前,迭代器遍历的原本模样 • 看起来很高级的 for (auto tmp: m) 只是 C++17 的语法糖,他实际上会被转换成: • for (auto it = map.begin(); it != map.end(); ++it) {0 码力 | 90 页 | 8.76 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串printf 指定类型繁琐 • printf 必须告诉他是字符串( %s )还是整数( %d )还是 字符( %c ),必须和右边的参数一致,初学者容易搞错 。 • 而且即使搞错了也能正常编译通过(一些高级的编译器会 给出警告),但是运行结果不对,或者还有可能崩溃。 泛型的 iostream 应运而生 • 得益于 C++ 的重载技术, cout 不用你手动指定类型,他 会自动识别参数的类型,帮你调用相应的格式化函数。 字符串的连接( + 运算符) • 错误: • 正确: C++14 新特性:自定义字面量后缀 • 不少同学就觉得这样好麻烦,其他语言都是直接 “ hello” 就是字符串类 型, C++ 还得套一层壳 string(“hello”) 才能变成安全封装的类型,才能用他 的成员函数。 • 因此, C++14 引入了一项缓解“键盘压力”的新特性: • 写 “ hello”_s 就相当于写 operator“”_s(“hello” 字符串没要求一定是 ‘ \0’ 结尾,字符串里是可以包含 ‘ \0’ 的。 C++14 新特性:自定义字面量后缀 • 如果你 using namespace std; 其实标准库已经自动帮你定义好了 “” s 后缀。 • 这里 “ hello”s 就等价于原本繁琐的 string(“hello”) 了。 C++14 新特性:自定义字面量后缀 • 如果你觉得 using namespace std; 太危险了不想用他。0 码力 | 162 页 | 40.20 MB | 1 年前3
Hello 算法 1.1.0 C++ 版1 初探动态规划 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 14.2 动态规划问题特性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 14.3 动态规划解题思路 . . . . . ,请继续往下阅读,本书将引导你 迈入数据结构与算法的知识殿堂。 1.2 算法是什么 1.2.1 算法定义 算法(algorithm)是在有限时间内解决特定问题的一组指令或操作步骤,它具有以下特性。 ‧ 问题是明确的,包含清晰的输入和输出定义。 ‧ 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 新的 第 3 章 数据结构 hello‑algo.com 65 更大的数组,并将旧数组的内容复制到新数组中。 Q:在构建栈(队列)的时候,未指定它的大小,为什么它们是“静态数据结构”呢? 在高级编程语言中,我们无须人工指定栈(队列)的初始容量,这个工作由类内部自动完成。例如,Java 的 ArrayList 的初始容量通常为 10。另外,扩容操作也是自动实现的。详见后续的“列表”章节。0 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 C++版1 初探动态规划 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 14.2 动态规划问题特性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 14.3 动态规划解题思路 . . . . . 请继续往下阅读,本书将 引导你迈入数据结构与算法的知识殿堂。 1.2 算法是什么 1.2.1 算法定义 「算法 algorithm」是在有限时间内解决特定问题的一组指令或操作步骤,它具有以下特性。 ‧ 问题是明确的,包含清晰的输入和输出定义。 ‧ 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 新的 第 3 章 数据结构 hello‑algo.com 65 更大的数组,并将旧数组的内容复制到新数组中。 Q:在构建栈(队列)的时候,未指定它的大小,为什么它们是“静态数据结构”呢? 在高级编程语言中,我们无须人工指定栈(队列)的初始容量,这个工作由类内部自动完成。例如,Java 的 ArrayList 的初始容量通常为 10。另外,扩容操作也是自动实现的。详见后续的“列表”章节。0 码力 | 378 页 | 17.59 MB | 1 年前3
Hello 算法 1.2.0 简体中文 C++ 版1 初探动态规划 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 14.2 动态规划问题特性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 14.3 动态规划解题思路 . . . . . ,请继续往下阅读,本书将引导你 迈入数据结构与算法的知识殿堂。 1.2 算法是什么 1.2.1 算法定义 算法(algorithm)是在有限时间内解决特定问题的一组指令或操作步骤,它具有以下特性。 ‧ 问题是明确的,包含清晰的输入和输出定义。 ‧ 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,在相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 第 3 章 数据结构 www.hello‑algo.com 65 更大的数组,并将旧数组的内容复制到新数组中。 Q:在构建栈(队列)的时候,未指定它的大小,为什么它们是“静态数据结构”呢? 在高级编程语言中,我们无须人工指定栈(队列)的初始容量,这个工作由类内部自动完成。例如,Java 的 ArrayList 的初始容量通常为 10。另外,扩容操作也是自动实现的。详见后续的“列表”章节。0 码力 | 379 页 | 18.48 MB | 10 月前3
C++高性能并行编程与优化 - 课件 - 01 学 C++ 从 CMake 学起CMake 可以自动检测源文件和头文件之间的依赖关系,导出到 Makefile 里。 • make 的语法非常简单,不像 shell 或 python 可以做很多判断等。 • CMake 具有相对高级的语法,内置的函数能够处理 configure , install 等常见需求。 • 不同的编译器有不同的 flag 规则,为 g++ 准备的参数可能对 MSVC 不适用。 • CMake 可以自动检测当前的编译器,需要添加哪些 为什么 C++ 需要声明 • 在多文件编译章中,说到了需要在 main.cpp 声明 hello() 才能引用。为什么? 1. 因为需要知道函数的参数和返回值类型:这样才能支持重载,隐式类型转换等特性。例 如 show(3) ,如果声明了 void show(float x) ,那么编译器知道把 3 转换成 3.0f 才能 调用。 2. 让编译器知道 hello 这个名字是一个函数,不是一个变量或者类的名字:这样当我写下0 码力 | 32 页 | 11.40 MB | 1 年前3
Hello 算法 1.0.0b4 C++版初探动态规划 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 14.2. 动态规划问题特性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 14.3. 动态规划解题思路 . . . . 因为这正是本书存在的意义。接下来,这本书将一步步引导你深入数据结构与算法的知识殿 堂。 1.2. 算法是什么 1.2.1. 算法定义 「算法 Algorithm」是在有限时间内解决特定问题的一组指令或操作步骤。算法具有以下特性: ‧ 问题是明确的,包含清晰的输入和输出定义。 ‧ 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,相同的输入和运行条件下,输出始终相同。 1.2.2. 数据结构定义 2.5. 链表典型应用 单向链表通常用于实现栈、队列、散列表和图等数据结构。 ‧ 栈与队列:当插入和删除操作都在链表的一端进行时,它表现出先进后出的的特性,对应栈;当插入操 作在链表的一端进行,删除操作在链表的另一端进行,它表现出先进先出的特性,对应队列。 ‧ 散列表:链地址法是解决哈希冲突的主流方案之一,在该方案中,所有冲突的元素都会被放到一个链表 中。 ‧ 图:邻接表是表示图的一种常0 码力 | 343 页 | 27.39 MB | 1 年前3
Hello 算法 1.0.0b5 C++版1 初探动态规划 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 14.2 动态规划问题特性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 14.3 动态规划解题思路 . . . . . 继续往下阅读,这本书 将引导你迈入数据结构与算法的知识殿堂。 1.2 算法是什么 1.2.1 算法定义 「算法 algorithm」是在有限时间内解决特定问题的一组指令或操作步骤,它具有以下特性。 ‧ 问题是明确的,包含清晰的输入和输出定义。 ‧ 具有可行性,能够在有限步骤、时间和内存空间下完成。 ‧ 各步骤都有确定的含义,相同的输入和运行条件下,输出始终相同。 1.2.2 数据结构定义 2.4 链表典型应用 单向链表通常用于实现栈、队列、哈希表和图等数据结构。 ‧ 栈与队列:当插入和删除操作都在链表的一端进行时,它表现出先进后出的的特性,对应栈;当插入操 作在链表的一端进行,删除操作在链表的另一端进行,它表现出先进先出的特性,对应队列。 ‧ 哈希表:链地址法是解决哈希冲突的主流方案之一,在该方案中,所有冲突的元素都会被放到一个链表 中。 ‧ 图:邻接表是表示图的一种常0 码力 | 377 页 | 30.69 MB | 1 年前3
《深入浅出MFC》2/e类别上,并供 应各式各样的应用实例,我却意不在此。我希望提供的是对MFC 应用程序基本架构的每一 个技术环节的深入探讨,其中牵扯到MFC 本身的设计原理、对象导向的观念、以及C++ 语 言的高级议题。有了基础面的全盘掌握,各个MFC 类别之使用对我们而言只不过是手册查 阅的功夫罢了。 本书书名已经自我说明了,这是一本既深又浅的书。深与浅是悖离的两条射线,理不应同时 存在。然而,没有深入如何浅出?不入虎穴焉得虎子? 已。如果已接触过C++ 但不十分熟悉,你可以一边复习C++ 一边学习MFC,这也是 我所鼓励的方式(很多人是为了使用MFC 而去学习C++ 的)。C++ 语言的继承 (inheritance)特性对于我们使用MFC 尤为重要,因为使用MFC 就是要继承各个类别 并为己用。所以,你应该对C++ 的继承特质(以及虚拟函数,当然)多加体会。我在 第2章安排了一些C++ 的必要基础。我所挑选的题目都是本书会用到的技术,而其深 其皮其肉或其骨,是不可能有所精进的,即使能够操控wizard,充其量却也只是个puppet, 对于手上的程序代码,没有自主权。 我认为学习MFC 之前,必要的基础是,对于Windows 程序的事件驱动特性的了解(包 括消息的产生、获得、分派、判断、处理),以及对C++ 多态(polymorphism)的精确 体会。本章所提出的,是我对第一项必要基础的探讨,你可以从中获得关于Windows 程0 码力 | 1009 页 | 11.08 MB | 1 年前3
现代C++ 教程:高速上手C++11/14/17/20. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 第 1 章迈向现代 C++ 8 1.1 被弃用的特性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.2 与 C 门,所有这些新标准中扩充的特性,给 C++ 这门语言注入了新的活力。那些还在坚持使用传统 C++ (本书把 C++98 及其之前的 C++ 特性均称之为传统 C++)而未接触过现代 C++ 的 C++ 程序员在 见到诸如 Lambda 表达式这类全新特性时,甚至会流露出『学的不是同一门语言』的惊叹之情。 现代 C++ (本书中均指 C++11/14/17/20) 为传统 C++ 注入的大量特性使得整个 C++ 具有了『匿名函数』的『闭包』特性,而这一特性几乎在现代的编程语言(诸如 Python/Swift/. . . )中已经司空见惯,右值引用的出现解决了 C++ 长期以来被人诟病的临时对象效率问题等等。 C++17 则是近三年依赖 C++ 社区一致推进的方向,也指出了 现代 C++ 编程的一个重要发展方 向。尽管它的出现并不如 C++11 的分量之重,但它包含了大量小而美的语言与特性(例如结构化绑定),0 码力 | 83 页 | 2.42 MB | 1 年前3
共 25 条
- 1
- 2
- 3













