C++高性能并行编程与优化 - 课件 - 15 C++ 系列课:字符与字符串wikipedia.org/wiki/ASCII 计算机如何表达字符 • 众所周知,计算机只能处理二进制 整数,字符要怎么办呢? • 于是就有了 ASCII 码表,他规定, 每个英文字符(包括大小写字母、 数字、特殊符号)都对应着一个整 数。在计算机里只要存储这个的整 数,就能代表这个字符了。 • 例如 32 代表空格, 48 代表 ‘ 0’ , 65 代表 ‘ A’ , 97 代表 ‘ a’…… • ‘z’ )。 • isalpha(c) 判断是否为字母(包括大写和小写)。 • isdigit(c) 判断是否为数字(‘ 0’ <= c && c <= ‘9’ )。 • isalnum(c) 判断是否为字母或数字(包括字母和数字)。 • isxdigit(c) 判断是否为十六进制数字( 0~9 或 a-f 或 A-F )。 • isspace(c) 判断是否为等价于空格的字符(‘ ’ 或 ‘ \t’ std::literials::string_literials std::literials::chrono_literials 字符串 <--> 数字 第 4 章 java 经典操作:字符串 + 数字 = 字符串 • 在 java 中,你甚至可以直接把字符串和数字相加,例如: • “you have ” + 42 + “ yuan” 会得到 “ you have 42 yuan” 。 • 他实际上是先把0 码力 | 162 页 | 40.20 MB | 1 年前3
Hello 算法 1.1.0 C++ 版52 3.2 基本数据类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.3 数字编码 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.4 字符编码 * . ,求该数列的第 ? 个数字。 设斐波那契数列的第 ? 个数字为 ?(?) ,易得两个结论。 ‧ 数列的前两个数字为 ?(1) = 0 和 ?(2) = 1 。 ‧ 数列中的每个数字是前两个数字的和,即 ?(?) = ?(? − 1) + ?(? − 2) 。 按照递推关系进行递归调用,将前两个数字作为终止条件,便可写出递归代码。调用 fib(n) 即可得到斐波那 契数列的第 ? 个数字: // === 较大时也是不可接受的。 2.3.5 最差、最佳、平均时间复杂度 算法的时间效率往往不是固定的,而是与输入数据的分布有关。假设输入一个长度为 ? 的数组 nums ,其中 nums 由从 1 至 ? 的数字组成,每个数字只出现一次;但元素顺序是随机打乱的,任务目标是返回元素 1 的 索引。我们可以得出以下结论。 ‧ 当 nums = [?, ?, ..., 1] ,即当末尾元素是 1 时,需要完整遍历数组,达到最差时间复杂度0 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 C++版52 3.2 基本数据类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.3 数字编码 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.4 字符编码 * . ,求该数列的第 ? 个数字。 设斐波那契数列的第 ? 个数字为 ?(?) ,易得两个结论。 ‧ 数列的前两个数字为 ?(1) = 0 和 ?(2) = 1 。 ‧ 数列中的每个数字是前两个数字的和,即 ?(?) = ?(? − 1) + ?(? − 2) 。 按照递推关系进行递归调用,将前两个数字作为终止条件,便可写出递归代码。调用 fib(n) 即可得到斐波那 契数列的第 ? 个数字: // === 较大时也是不可接受的。 2.3.5 最差、最佳、平均时间复杂度 算法的时间效率往往不是固定的,而是与输入数据的分布有关。假设输入一个长度为 ? 的数组 nums ,其中 nums 由从 1 至 ? 的数字组成,每个数字只出现一次;但元素顺序是随机打乱的,任务目标是返回元素 1 的 索引。我们可以得出以下结论。 ‧ 当 nums = [?, ?, ..., 1] ,即当末尾元素是 1 时,需要完整遍历数组,达到最差时间复杂度0 码力 | 378 页 | 17.59 MB | 1 年前3
Hello 算法 1.0.0b5 C++版50 3.2 基本数据类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.3 数字编码 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.4 字符编码 * . ,求该数列的第 ? 个数字。 设斐波那契数列的第 ? 个数字为 ?(?) ,易得两个结论。 ‧ 数列的前两个数字为 ?(1) = 0 和 ?(2) = 1 。 ‧ 数列中的每个数字是前两个数字的和,即 ?(?) = ?(? − 1) + ?(? − 2) 。 按照递推关系进行递归调用,将前两个数字作为终止条件,便可写出递归代码。调用 fib(n) 即可得到斐波那 契数列的第 ? 个数字。 // === com 38 2.3.5 最差、最佳、平均时间复杂度 算法的时间效率往往不是固定的,而是与输入数据的分布有关。假设输入一个长度为 ? 的数组 nums ,其中 nums 由从 1 至 ? 的数字组成,每个数字只出现一次;但元素顺序是随机打乱的,任务目标是返回元素 1 的 索引。我们可以得出以下结论。 ‧ 当 nums = [?, ?, ..., 1] ,即当末尾元素是 1 时,需要完整遍历数组,达到最差时间复杂度0 码力 | 377 页 | 30.69 MB | 1 年前3
Hello 算法 1.2.0 简体中文 C++ 版52 3.2 基本数据类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.3 数字编码 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 3.4 字符编码 * . ,求该数列的第 ? 个数字。 设斐波那契数列的第 ? 个数字为 ?(?) ,易得两个结论。 ‧ 数列的前两个数字为 ?(1) = 0 和 ?(2) = 1 。 ‧ 数列中的每个数字是前两个数字的和,即 ?(?) = ?(? − 1) + ?(? − 2) 。 按照递推关系进行递归调用,将前两个数字作为终止条件,便可写出递归代码。调用 fib(n) 即可得到斐波那 契数列的第 ? 个数字: // === 较大时也是不可接受的。 2.3.5 最差、最佳、平均时间复杂度 算法的时间效率往往不是固定的,而是与输入数据的分布有关。假设输入一个长度为 ? 的数组 nums ,其中 nums 由从 1 至 ? 的数字组成,每个数字只出现一次;但元素顺序是随机打乱的,任务目标是返回元素 1 的 索引。我们可以得出以下结论。 ‧ 当 nums = [?, ?, ..., 1] ,即当末尾元素是 1 时,需要完整遍历数组,达到最差时间复杂度0 码力 | 379 页 | 18.48 MB | 10 月前3
Hello 算法 1.0.0b2 C++版nums , 其中 nums 由从 1 至 ? 的数字组成,但元素顺序是随机打乱的;算法的任务是返回元素 1 的索引。我们可以得 出以下结论: ‧ 当 nums = [?, ?, ..., 1],即当末尾元素是 1 时,则需完整遍历数组,此时达到 最差时间复杂度 ?(?) ; ‧ 当 nums = [1, ?, ?, ...] ,即当首个数字为 1 时,无论数组多长都不需要继续遍历,此时达到 随机打乱数组元素 shuffle(nums.begin(), nums.end(), default_random_engine(seed)); return nums; } /* 查找数组 nums 中数字 1 所在索引 */ int findOne(vector& nums) { for (int i = 0; i < nums.size(); i++) { // 当元素 1 在数组头部时,达到最佳时间复杂度 满二叉树产生的指数阶空间复杂度 对数阶 ?(log ?) 对数阶常见于分治算法、数据类型转换等。 例如「归并排序」,长度为 ? 的数组可以形成高度为 log ? 的递归树,因此空间复杂度为 ?(log ?) 。 再例如「数字转化为字符串」,输入任意正整数 ? ,它的位数为 log10 ? ,即对应字符串长度为 log10 ? ,因 此空间复杂度为 ?(log10 ?) = ?(log ?) 。 2.4. 权衡时间与空间 0 码力 | 197 页 | 15.72 MB | 1 年前3
Hello 算法 1.0.0b4 C++版37 3.2. 基本数据类型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.3. 数字编码 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 3.4. 字符编码 * nums ,其中 nums 由从 1 至 ? 的数字组成,但元素顺序是随机打乱的;算法的任务是返回元素 1 的索引。我们可 以得出以下结论: ‧ 当 nums = [?, ?, ..., 1] ,即当末尾元素是 1 时,需要完整遍历数组,此时达到 最差时间复杂度 ?(?) 。 ‧ 当 nums = [1, ?, ?, ...] ,即当首个数字为 1 时,无论数组多长都不需要继续遍历,此时达到 随机打乱数组元素 shuffle(nums.begin(), nums.end(), default_random_engine(seed)); return nums; } /* 查找数组 nums 中数字 1 所在索引 */ int findOne(vector&nums) { for (int i = 0; i < nums.size(); i++) { // 当元素 1 在数组头部时,达到最佳时间复杂度 0 码力 | 343 页 | 27.39 MB | 1 年前3
Hello 算法 1.0.0b1 C++版nums , 其中 nums 由从 1 至 ? 的数字组成,但元素顺序是随机打乱的;算法的任务是返回元素 1 的索引。我们可以得 出以下结论: ‧ 当 nums = [?, ?, ..., 1],即当末尾元素是 1 时,则需完整遍历数组,此时达到 最差时间复杂度 ?(?) ; ‧ 当 nums = [1, ?, ?, ...] ,即当首个数字为 1 时,无论数组多长都不需要继续遍历,此时达到 随机打乱数组元素 shuffle(nums.begin(), nums.end(), default_random_engine(seed)); return nums; } /* 查找数组 nums 中数字 1 所在索引 */ int findOne(vector& nums) { for (int i = 0; i < nums.size(); i++) { // 当元素 1 在数组头部时,达到最佳时间复杂度 满二叉树产生的指数阶空间复杂度 对数阶 ?(log ?) 对数阶常见于分治算法、数据类型转换等。 例如「归并排序」,长度为 ? 的数组可以形成高度为 log ? 的递归树,因此空间复杂度为 ?(log ?) 。 再例如「数字转化为字符串」,输入任意正整数 ? ,它的位数为 log10 ? ,即对应字符串长度为 log10 ? ,因 此空间复杂度为 ?(log10 ?) = ?(log ?) 。 2.4. 权衡时间与空间 0 码力 | 187 页 | 14.71 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 16 现代 CMake 模块化项目管理指南科普:语义版本号( semantic versioning )系统 • 软件行业记录版本迭代普遍采用的是一套所谓的语义版本号系统,英文简称 semver 。 • 通常他的格式是三个用点分隔开来的十进制数字:. . • 例如: 1.2.0 , 0.6.8 , 18.11.0 • major 称为主版本号,出现功能重大变更,以至于和旧 API 不兼容的时候会增加该号。 称为补丁版号,功能没有改变,只是修复了一些 bug 就重新发布时会增加该号。 • 也有的软件不拘一格(例如我们的 zeno ),索性用发布的日期作为版本号的三个数字, 例如 2022.11.2 。不论采用哪种编号方案,都是几个用点分开的数字,并且数字越大越新 ,且优先比较靠前面的数字。因此为了通用, CMake 支持最多四个点分开的版本号: . . . 。并且如果你写 0 码力 | 56 页 | 6.87 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 12 从计算机组成原理看 C 语言指针unsigned long long 其实 C 语言也有 signed 修饰符,但是因为不加默认就是 signed 的,所以其实没有使用 signed 的必要。 字面常量:通过修饰符来确定 • 在数字后面追加 U 和 L 可以表示不同类型的字面常量,例如: • 32 是 int 类型 • 32L 是 long 类型 • 32LL 是 long long 类型 • 32U 是 unsigned 代替 NULL , 因为 C++ 额外规定了 0 可以是表示空指 针,也可以是数字 0 。 用 0 代替 NULL ,会产生重载的麻烦 • 不过这样问题也非常大,如果正好 func 有两个重载,分别是 func(int*) 和 func(int) 。 • 那么 C++ 会优先认为 func(0) 是数字 0 ,而不是空指针。从而会去调用 func(int) 的那个重载。 现代 表示一个英文字符 a 。实际上 ‘ a’ 等价于 他的 ASCII 码 97 。 • 不信的话,你可以作为 %d 打印和 %c 打印看看,可见 char 的确有双重身份, 一方面是字符,一方面又是数字。 字符常量其实就是对应的 ASCII 码 • 我们知道 C 语言中的字符常量形如:‘ a’ 表示一个英文字符 a 。实际上 ‘ a’ 等价于 他的 ASCII 码 97 。 • 作为实验,我们可以把0 码力 | 128 页 | 2.95 MB | 1 年前3
共 16 条
- 1
- 2













