C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串编译器检测到字符串中出现 \ 就会把下一个字符特殊处理。 • 而 % ,编译器并不会特殊处理 % ,是 printf 函数内部在运行时处理了 % 的下一个字符。 • % 就像你和同学随手“拉钩”定下的约定,这是 printf 约定俗成的。 • \ 就像正式合同,有法律效力的,这是 C 语言编译器规定好的。 C++ 字符串类 第 3 章 C 语言字符串操作繁琐 封装的 std::string 应运而生 封装的 编译器会 给出警告),但是运行结果不对,或者还有可能崩溃。 泛型的 iostream 应运而生 • 得益于 C++ 的重载技术, cout 不用你手动指定类型,他 会自动识别参数的类型,帮你调用相应的格式化函数。 c_str 和 data 的区别 • s.c_str() 保证返回的是以 0 结尾的字符串首地址指针,总长度为 s.size() + 1 。 • s.data() 只保证返回长度为 char * 可以隐式转换为 string (为了方便) • string 不可以隐式转换为 const char * (安全起见) • 如果确实需要从 string 转换为 const char * ,请调用 .c_str() 这个成员函数 。 字符串的连接( + 运算符) • C 语言规定,双引号包裹的字符串是 const char * 类型的,他们没有 + 运算 符。 • C++ 为了向前兼容,没办法改变0 码力 | 162 页 | 40.20 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 13 C++ STL 容器全解之 vectorvectora{4}; • 会得到长度为 1 只有一个元素 4 的数组。 • 如果需要长度为 4 ,元素全部为 0 的数组,必 须用圆括号 () 而不是花括号 {} ,这样才能保证 调用他的显式( explicit )构造函数: • vector a(4); • 会得到长度为 4 元素全为 0 的数组。 • vector(initializer_list list); 容器:构造函数 • 这在对于只能用花括号初始化的类成员来说,就 有很大问题: • vector a{4}; • 会得到长度为 1 只有一个元素 4 的数组。 • 但还是可以用这种写法强制调用显式构造函数: • vector a = vector (4); • 会得到长度为 4 元素全为 0 的数组。 • vector(initializer_list list); 容器:构造函数 • 这在对于只能用花括号初始化的类成员来说,就 有很大问题: • vector a{4}; • 会得到长度为 1 只有一个元素 4 的数组。 • 但还是可以用这种写法强制调用显式构造函数: • vector a = vector (4); • 会得到长度为 4 元素全为 0 的数组。 • vector(initializer_list list); 0 码力 | 90 页 | 4.93 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南等各种选项。然后通过 project 命令初始 化了根项目。 • 随后通过 add_subdirectory 把两个子项 目 pybmain 和 biology 添加进来(顺序 无关紧要),这会调用 pybmain/CMakeLists.txt 和 biology/CMakeLists.txt 。 三、子项目的 CMakeLists.txt 配置 • 子项目的 CMakeLists 是他里面并没有解引用 Animal ,只有源文件 Carer.cpp 解引用了 Animal 。 • 那么这个头文件是不需要导入 Animal.h 的,只需要一个前置声明 struct Animal ,只有实际调用了 Animal 成员函数的源文件需要导入 Animal.h 。 • 好处:加快编译速度,防止循环引用。 十一、以项目名为名字空间( namsepace ),避免符号冲突 • 在声明和定义外面 这样你可以在 XXX.cmake 里写一些你常用的函数,宏,变量等。 macro 和 function 的区别 • macro 相当于直接把代码粘贴过去,直接访问调用者的作用域。这里写的相对路径 include 和 src ,是基于调用者所在路径。 • function 则是会创建一个闭包,优先访问定义者的作用域。这里写的相对路径 include 和 src ,则是基于定义者所在路径。 https://cmake0 码力 | 56 页 | 6.87 MB | 1 年前3
Hello 算法 1.0.0b1 C++版关刷题心得可以 在各个社区中找到。 作为一本入门教程,本书内容主要对应“第一阶段”,致力于帮助你更高效地开展第二、三阶段的学习。 Figure 0‑2. 算法学习路线 0.2.2. 行文风格约定 标题后标注 * 的是选读章节,内容相对较难。如果你的时间有限,建议可以先跳过。 文章中的重要名词会用「括号」 标注,例如「数组 Array」 。建议记住这些名词,包括英文翻译,以便后续阅 读文献时使用。 是一个已排序的「数组」;而从算法角度,我们可将上述查字典的一系列指令看作是「二分查找」算法。 小到烹饪一道菜、大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现,使我们可以通过编程将 数据结构存储在内存中,也可以编写代码来调用 CPU, GPU 执行算法,从而将生活中的问题搬运到计算机中, 更加高效地解决各式各样的复杂问题。 � 读到这里,如果你感到对数据结构、算法、数组、二分查找等此类概念一知半解,那么就太好 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 1. 引言 hello‑algo.com 11 � 约定俗成的简称 在实际讨论中,我们通常会将「数据结构与算法」直接简称为「算法」。例如,我们熟称的 LeetCode 算法题目,实际上同时考察了数据结构和算法两部分知识。 1.3. 小结 ‧ 算法0 码力 | 187 页 | 14.71 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化:写入两次,第一次明显比第二次慢? new int[n] :和 malloc 一样,写入两次,第一次明显比第二次慢? new int[n]{} :后面加个花括号,就和 vector 一样,两次一样快了 结论 • 原理,当调用 malloc 时,操作系统并不会实际分配那一块内存,而是将这一段内存标记 为“不可用”。当用户试图访问(写入)这一片内存时,硬件就会触发所谓的缺页中断 ( page fault ),进入操作系统内核,内核会查找当前进程的 临时创建的数组,每次调用 func 都会重 复内存分配一次(进入一次内核态),非 常浪费时间。 解决:手动池化 • 声明为 static 变量,这样第二次进入 func 的时候还是 同一个数组,不需要重复分配内存。 thread_local 表示 如有多个线程,每个线程保留一个 tmp 对象的副本, 防止多线程调用 func 出错。 • 返回时(或者进入时)调用 tmp.clear() 用其成员的解构函数,而不会实际释放内存( free )。 • 因此第二次进入的时候,如果 n 不超过上一次的大小 ,就还是用的第一次分配的内存,避免了重新分配的开 销。对 func 需要被重复调用的情况很实用。 第 6 章:多维数组 C 语言静态数组 • float a[n]; 可以在栈上分配有 n 个元素的一维数组。 • 通过 a[i] 访问第 i 个元素。 • float a[n][m];0 码力 | 147 页 | 18.88 MB | 1 年前3
Hello 算法 1.0.0b2 C++版关刷题心得可以 在各个社区中找到。 作为一本入门教程,本书内容主要对应“第一阶段”,致力于帮助你更高效地开展第二、三阶段的学习。 Figure 0‑2. 算法学习路线 0.2.2. 行文风格约定 标题后标注 * 的是选读章节,内容相对较难。如果你的时间有限,建议可以先跳过。 文章中的重要名词会用「括号」 标注,例如「数组 Array」 。建议记住这些名词,包括英文翻译,以便后续阅 读文献时使用。 是一个已排序的「数组」;而从算法角度,我们可将上述查字典的一系列指令看作是「二分查找」算法。 小到烹饪一道菜、大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现,使我们可以通过编程将 数据结构存储在内存中,也可以编写代码来调用 CPU, GPU 执行算法,从而将生活中的问题搬运到计算机中, 更加高效地解决各式各样的复杂问题。 � 读到这里,如果你感到对数据结构、算法、数组、二分查找等此类概念一知半解,那么就太好 输入数据 未拼装的积木 数据结构 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 1. 引言 hello‑algo.com 11 � 约定俗成的简称 在实际讨论中,我们通常会将「数据结构与算法」直接简称为「算法」。例如,我们熟称的 LeetCode 算法题目,实际上同时考察了数据结构和算法两部分知识。 1.3. 小结 ‧ 算法0 码力 | 197 页 | 15.72 MB | 1 年前3
Hello 算法 1.1.0 C++ 版本优秀的著作。 衷心感谢我的父母,正是你们一直以来的支持与鼓励,让我有机会做这件富有趣味的事。 0.2 如何使用本书 Tip 为了获得最佳的阅读体验,建议你通读本节内容。 0.2.1 行文风格约定 ‧ 标题后标注 * 的是选读章节,内容相对困难。如果你的时间有限,可以先跳过。 ‧ 专业术语会使用黑体(纸质版和 PDF 版)或添加下划线(网页版),例如数组(array)。建议记住它们, 以便阅读文献。 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概念仍感到一知半解,请继续往下阅读,本书将引导你 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供基于多种编程语言的实现。 约定俗成的简称 在实际讨论时,我们通常会将“数据结构与算法”简称为“算法”。比如众所周知的 LeetCode 算法题 目,实际上同时考查数据结构和算法两方面的知识。 1.3 小结 ‧ 算法在日常0 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 C++版本优秀的著作。 衷心感谢我的父母,正是你们一直以来的支持与鼓励,让我有机会做这件富有趣味的事。 0.2 如何使用本书 � 为了获得最佳的阅读体验,建议你通读本节内容。 0.2.1 行文风格约定 ‧ 标题后标注 * 的是选读章节,内容相对困难。如果你的时间有限,可以先跳过。 ‧ 重要专有名词及其英文翻译会用「」 括号标注,例如「数组 array」 。建议记住它们,以便阅读文献。 ‧ 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 � 如果你对数据结构、算法、数组和二分查找等概念仍感到一知半解,请继续往下阅读,本书将 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供基于多种编程语言的实现。 � 约定俗成的简称 在实际讨论时,我们通常会将“数据结构与算法”简称为“算法”。比如众所周知的 LeetCode 算法题目,实际上同时考查数据结构和算法两方面的知识。 1.3 小结 ‧ 算法在日常生0 码力 | 378 页 | 17.59 MB | 1 年前3
Hello 算法 1.0.0b5 C++版衷心感谢我的父母,正是你们一直以来的支持与鼓励,让我有机会做这件富有趣味的事。 0.2 如何使用本书 � 为了获得最佳的阅读体验,建议您通读本节内容。 第 0 章 前言 hello‑algo.com 4 0.2.1 行文风格约定 ‧ 标题后标注 * 的是选读章节,内容相对困难。如果你的时间有限,建议可以先跳过。 ‧ 专有名词和有特指含义的词句会使用“双引号” 标注,以避免歧义。 ‧ 重要专有名词及其英文翻译会用「」 括号标注,例如「数组 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使我们能够通过编程将 数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题转 移到计算机上,以更高效的方式解决各种复杂问题。 � 如果你对数据结构、算法、数组和二分查找等概念仍感到一知半解,请继续往下阅读,这本书 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供多种编程语言的实现。 � 约定俗成的简称 在实际讨论时,我们通常会将“数据结构与算法”简称为“算法”。比如众所周知的 LeetCode 算法题目,实际上同时考察了数据结构和算法两方面的知识。 1.3 小结 ‧ 算法在日常0 码力 | 377 页 | 30.69 MB | 1 年前3
Hello 算法 1.2.0 简体中文 C++ 版本优秀的著作。 衷心感谢我的父母,正是你们一直以来的支持与鼓励,让我有机会做这件富有趣味的事。 0.2 如何使用本书 Tip 为了获得最佳的阅读体验,建议你通读本节内容。 0.2.1 行文风格约定 ‧ 标题后标注 * 的是选读章节,内容相对困难。如果你的时间有限,可以先跳过。 ‧ 专业术语会使用黑体(纸质版和 PDF 版)或添加下划线(网页版),例如数组(array)。建议记住它们, 以便阅读文献。 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概念仍感到一知半解,请继续往下阅读,本书将引导你 积木组织形式,包括形状、大小、连接方式等 算法 把积木拼成目标形态的一系列操作步骤 输出数据 积木模型 值得说明的是,数据结构与算法是独立于编程语言的。正因如此,本书得以提供基于多种编程语言的实现。 约定俗成的简称 在实际讨论时,我们通常会将“数据结构与算法”简称为“算法”。比如众所周知的 LeetCode 算法题 目,实际上同时考查数据结构和算法两方面的知识。 1.3 小结 ‧ 算法在日常0 码力 | 379 页 | 18.48 MB | 10 月前3
共 28 条
- 1
- 2
- 3













