C++高性能并行编程与优化 - 课件 - 14 C++ 标准库系列课 - 你所不知道的 set 容器C++ 标准库系列课 - 你所不知道的 set 容 器 by 小彭老师( @archibate ) 课件 & 代码: https://github.com/parallel101/course 上期回顾: https://www.bilibili.com/video/BV1qF411T7sd 课程安排 1. vector 容器初体验 & 迭代器入门 (BV1qF411T7sd) 2. 你所不知道的 const char * 的爱恨纠葛 4. 万能的 map 容器全家桶及其妙用举例 5. 函子 functor 与 lambda 表达式知多少 6. 通过实战案例来学习 STL 算法库 7. C++ 标准输入输出流 & 字符串格式化 8. traits 技术,用户自定义迭代器与算法 9. allocator ,内存管理与对象生命周期 set 和 vector 的区别 • 都是能存储一连串数据的容器 拟出来的 + n 复杂度为 O(n) 。虽然低效,但至少可 以用了。 std::next 等价于 + • 但是这样手写三个 ++ 太麻烦了 ,而且是就地操作,会改变迭代 器本身。 • 因此标准库提供了 std::next 函 数,他的内部实现相当于这样: • 没错,他会自动判断迭代器是否 支持 + 运算,如果不支持,会 改为比较低效的调用 n 次 ++ 。 std::advance0 码力 | 83 页 | 10.23 MB | 1 年前3
Hello 算法 1.1.0 C++ 版均时间复杂度为 Θ(?/2) = Θ(?) 。 但对于较为复杂的算法,计算平均时间复杂度往往比较困难,因为很难分析出在数据分布下的整体数学期望。 在这种情况下,我们通常使用最差时间复杂度作为算法效率的评判标准。 为什么很少看到 Θ 符号? 可能由于 ? 符号过于朗朗上口,因此我们常常使用它来表示平均时间复杂度。但从严格意义上讲,这 种做法并不规范。在本书和其他资料中,若遇到类似“平均时间复杂度 ?( 需要表示小数,取值范围应该变小才对。 实际上,这是因为浮点数 float 采用了不同的表示方式。记一个 32 比特长度的二进制数为: ?31?30?29 … ?2?1?0 根据 IEEE 754 标准,32‑bit 长度的 float 由以下三个部分构成。 ‧ 符号位 S :占 1 位,对应 ?31 。 ‧ 指数位 E :占 8 位,对应 ?30?29 … ?23 。 ‧ 分数位 N :占 254} (1 + N) =(1 + 23 ∑ ?=1 ?23−?2−?) ⊂ [1, 2 − 2−23] 第 3 章 数据结构 hello‑algo.com 59 图 3‑5 IEEE 754 标准下的 float 的计算示例 观察图 3‑5 ,给定一个示例数据 S = 0 ,E = 124 ,N = 2−2 + 2−3 = 0.375 ,则有: val = (−1)0 × 2124−1270 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 C++版均时间复杂度为 Θ(?/2) = Θ(?) 。 但对于较为复杂的算法,计算平均时间复杂度往往比较困难,因为很难分析出在数据分布下的整体数学期望。 在这种情况下,我们通常使用最差时间复杂度作为算法效率的评判标准。 � 为什么很少看到 Θ 符号? 可能由于 ? 符号过于朗朗上口,因此我们常常使用它来表示平均时间复杂度。但从严格意义 上讲,这种做法并不规范。在本书和其他资料中,若遇到类似“平均时间复杂度 需要表示小数,取值范围应该变小才对。 实际上,这是因为浮点数 float 采用了不同的表示方式。记一个 32 比特长度的二进制数为: ?31?30?29 … ?2?1?0 根据 IEEE 754 标准,32‑bit 长度的 float 由以下三个部分构成。 ‧ 符号位 S :占 1 位,对应 ?31 。 ‧ 指数位 E :占 8 位,对应 ?30?29 … ?23 。 ‧ 分数位 N :占 254} (1 + N) =(1 + 23 ∑ ?=1 ?23−?2−?) ⊂ [1, 2 − 2−23] 第 3 章 数据结构 hello‑algo.com 59 图 3‑5 IEEE 754 标准下的 float 的计算示例 观察图 3‑5 ,给定一个示例数据 S = 0 ,E = 124 ,N = 2−2 + 2−3 = 0.375 ,则有: val = (−1)0 × 2124−1270 码力 | 378 页 | 17.59 MB | 1 年前3
Hello 算法 1.2.0 简体中文 C++ 版均时间复杂度为 Θ(?/2) = Θ(?) 。 但对于较为复杂的算法,计算平均时间复杂度往往比较困难,因为很难分析出在数据分布下的整体数学期望。 在这种情况下,我们通常使用最差时间复杂度作为算法效率的评判标准。 为什么很少看到 Θ 符号? 可能由于 ? 符号过于朗朗上口,因此我们常常使用它来表示平均时间复杂度。但从严格意义上讲,这 种做法并不规范。在本书和其他资料中,若遇到类似“平均时间复杂度 ?( 需要表示小数,取值范围应该变小才对。 实际上,这是因为浮点数 float 采用了不同的表示方式。记一个 32 比特长度的二进制数为: ?31?30?29 … ?2?1?0 根据 IEEE 754 标准,32‑bit 长度的 float 由以下三个部分构成。 ‧ 符号位 S :占 1 位,对应 ?31 。 ‧ 指数位 E :占 8 位,对应 ?30?29 … ?23 。 ‧ 分数位 N :占 (1 + N) =(1 + 23 ∑ ?=1 ?23−?2−?) ⊂ [1, 2 − 2−23] 第 3 章 数据结构 www.hello‑algo.com 59 图 3‑5 IEEE 754 标准下的 float 的计算示例 观察图 3‑5 ,给定一个示例数据 S = 0 ,E = 124 ,N = 2−2 + 2−3 = 0.375 ,则有: val = (−1)0 × 2124−1270 码力 | 379 页 | 18.48 MB | 10 月前3
Hello 算法 1.0.0b4 C++版‧ 时间效率,即算法运行速度的快慢。 ‧ 空间效率,即算法占用内存空间的大小。 简而言之,我们的目标是设计“既快又省”的数据结构与算法。掌握评估算法效率的方法则至关重要,因为 只有了解评价标准,我们才能进行算法之间的对比分析,从而指导算法设计与优化过程。 2.1.2. 效率评估方法 实际测试 假设我们现在有算法 A 和算法 B,它们都能解决同一问题,现在需要对比这两个算法的效率。我们最直接的 2) = Θ(?) 。 但在实际应用中,尤其是较为复杂的算法,计算平均时间复杂度比较困难,因为很难简便地分析出在数据分 布下的整体数学期望。在这种情况下,我们通常使用最差时间复杂度作为算法效率的评判标准。 � 为什么很少看到 Θ 符号? 可能由于 ? 符号过于朗朗上口,我们常常使用它来表示「平均复杂度」,但从严格意义上看, 这种做法并不规范。在本书和其他资料中,若遇到类似“平均时间复杂度 float 的取值范围远大于 int ?这非 常反直觉,因为按理说 float 需要表示小数,取值范围应该变小才对。 实际上,这是因为浮点数 float 采用了不同的表示方式。根据 IEEE 754 标准,32‑bit 长度的 float 由以下 部分构成: ‧ 符号位 S :占 1 bit 。 ‧ 指数位 E :占 8 bits 。 ‧ 分数位 N :占 24 bits ,其中 23 位显式存储。0 码力 | 343 页 | 27.39 MB | 1 年前3
Hello 算法 1.0.0b5 C++版均时间复杂度为 Θ(?/2) = Θ(?) 。 但对于较为复杂的算法,计算平均时间复杂度往往是比较困难的,因为很难分析出在数据分布下的整体数学 期望。在这种情况下,我们通常使用最差时间复杂度作为算法效率的评判标准。 � 为什么很少看到 Θ 符号? 可能由于 ? 符号过于朗朗上口,我们常常使用它来表示平均时间复杂度。但从严格意义上看, 这种做法并不规范。在本书和其他资料中,若遇到类似“平均时间复杂度 需要表示小数,取值范围应该变小才对。 实际上,这是因为浮点数 float 采用了不同的表示方式。记一个 32‑bit 长度的二进制数为: ?31?30?29 … ?2?1?0 根据 IEEE 754 标准,32‑bit 长度的 float 由以下三个部分构成。 ‧ 符号位 S :占 1 bit ,对应 ?31 。 ‧ 指数位 E :占 8 bits ,对应 ?30?29 … ?23 。 ‧ 分数位 254} (1 + N) =(1 + 23 ∑ ?=1 ?23−?2−?) ⊂ [1, 2 − 2−23] 第 3 章 数据结构 hello‑algo.com 57 图 3‑5 IEEE 754 标准下的 float 的计算示例 观察图 3‑5 ,给定一个示例数据 S = 0 ,E = 124 ,N = 2−2 + 2−3 = 0.375 ,则有: val = (−1)0 × 2124−1270 码力 | 377 页 | 30.69 MB | 1 年前3
Hello 算法 1.0.0b1 C++版2) = Θ(?) 。 但在实际应用中,尤其是较为复杂的算法,计算平均时间复杂度比较困难,因为很难简便地分析出在数据分布 下的整体数学期望。这种情况下,我们一般使用最差时间复杂度来作为算法效率的评判标准。 � 为什么很少看到 Θ 符号? 实际中我们经常使用「大 ? 符号」来表示「平均复杂度」,这样严格意义上来说是不规范的。这 可能是因为 ? 符号实在是太朗朗上口了。如果在本书和其他资料中看到类似 bytes ,但为什么 float 的取值范围远大于 int ?按说 float 需要表示小数,取值范围应该变小才对。 其实,这是因为浮点数 float 采用了不同的表示方式。IEEE 754 标准规定,32‑bit 长度的 float 由以下部分构 成: ‧ 符号位 S :占 1 bit ; ‧ 指数位 E :占 8 bits ; ‧ 分数位 N :占 24 bits ,其中 23 位显式存储; + N) =(1 + 23 ∑ ?=1 ?23−?2−?) ⊂ [1, 2 − 2−23] 3. 数据结构简介 hello‑algo.com 39 Figure 3‑1. IEEE 754 标准下的 float 表示方式 以上图为例,S = 0 ,E = 124 ,N = 2−2 + 2−3 = 0.375 ,易得 val = (−1)0 × 2124−127 × (1 + 0.375)0 码力 | 187 页 | 14.71 MB | 1 年前3
Hello 算法 1.0.0b2 C++版2) = Θ(?) 。 但在实际应用中,尤其是较为复杂的算法,计算平均时间复杂度比较困难,因为很难简便地分析出在数据分布 下的整体数学期望。这种情况下,我们一般使用最差时间复杂度来作为算法效率的评判标准。 � 为什么很少看到 Θ 符号? 实际中我们经常使用「大 ? 符号」来表示「平均复杂度」,这样严格意义上来说是不规范的。这 可能是因为 ? 符号实在是太朗朗上口了。如果在本书和其他资料中看到类似 bytes ,但为什么 float 的取值范围远大于 int ?按说 float 需要表示小数,取值范围应该变小才对。 其实,这是因为浮点数 float 采用了不同的表示方式。IEEE 754 标准规定,32‑bit 长度的 float 由以下部分构 成: ‧ 符号位 S :占 1 bit ; ‧ 指数位 E :占 8 bits ; ‧ 分数位 N :占 24 bits ,其中 23 位显式存储; + N) =(1 + 23 ∑ ?=1 ?23−?2−?) ⊂ [1, 2 − 2−23] 3. 数据结构简介 hello‑algo.com 39 Figure 3‑1. IEEE 754 标准下的 float 表示方式 以上图为例,S = 0 ,E = 124 ,N = 2−2 + 2−3 = 0.375 ,易得 val = (−1)0 × 2124−127 × (1 + 0.375)0 码力 | 197 页 | 15.72 MB | 1 年前3
《深入浅出MFC》2/e1 《深入浅出MFC》2/e 电子书开放自由下载 声明 致亲爱的大陆读者 我是侯捷(侯俊杰)。自从华中理工大学于1998/04 出版了我的《深入浅出MFC》 1/e 简体版(易名《深入浅出Windows MFC 程序设计》)之后,陆陆续续我 收到了许多许多的大陆读者来函。其中对我的赞美、感谢、关怀、殷殷垂询, 让我非常感动。 《深入浅出MFC》2/e 早已于1998/05 于台湾出版。之所以迟迟没有授权给大 附录、无责任书评那个文件没有转(估计看到那个地方的时候,你手里也该有一本纸板的了)。 2 因此,此书虽已出版两年,鉴于仍具阅读与技术上的价值,鉴于繁简转译制作 上的费时费工,鉴于我对同胞的感情,我决定开放此书内容,供各位免费阅读。 我已为《深入浅出MFC 》2/e 制作了PDF 格式之电子文件, 放在 http://www.jjhou.com 供自由下载。北京http://expert.csdn Programming Interface。系统开放出来,给程序员使用的接口,就是 API。一般人的观念中API 是指像C 函数那样的东西,不尽然!DOS 的中断向量 (interrupt vector)也可以说是一种API,OLE Interface(以C++ 类别的形式呈现)也可 以说是一种API。不是有人这么说吗:MFC 势将成为Windows 环境上标准的C++ API (我个人认为这句话已成为事实)。0 码力 | 1009 页 | 11.08 MB | 1 年前3
现代C++ 教程:高速上手C++11/14/17/20是一个用户群体相当大的语言。从 C++98 的出现到 C++11 的正式定稿经历了长达十年多之 久的积累。C++14/17 则是作为对 C++11 的重要补充和优化,C++20 则将这门语言领进了现代化的大 门,所有这些新标准中扩充的特性,给 C++ 这门语言注入了新的活力。那些还在坚持使用传统 C++ (本书把 C++98 及其之前的 C++ 特性均称之为传统 C++)而未接触过现代 C++ 的 C++ 程序员在 见到诸如 向。尽管它的出现并不如 C++11 的分量之重,但它包含了大量小而美的语言与特性(例如结构化绑定), 这些特性的出现再一次修正了我们在 C++ 中的编程范式。 现代 C++ 还为自身的标准库增加了非常多的工具和方法,诸如在语言自身标准的层面上制定了 std::thread,从而支持了并发编程,在不同平台上不再依赖于系统底层的 API,实现了语言层面的跨 平台支持;std::regex 提供了完整的正则表达式支持等等。C++98 的出现,则进一步推动这种范型,让 C++ 成为系统程序设计和库开发更好的 语言。Concept 提供了对模板参数编译期的检查,进一步增强了语言整体的可用性。 总而言之,我们作为 C++ 的拥护与实践者,始终保持接纳新事物的开放心态,才能更快的推进 C++ 的发展,使得这门古老而又新颖的语言更加充满活力。 目标读者 1. 本书假定读者已经熟悉了传统 C++ ,至少在阅读传统 C++ 代码上不具备任何困难。换句话说,0 码力 | 83 页 | 2.42 MB | 1 年前3
共 29 条
- 1
- 2
- 3













