 C++高性能并行编程与优化 -  课件 - 15 C++ 系列课:字符与字符串C++ 系列课:字符与字符串 by 小彭老师( @archibate ) 课件 & 代码: https://github.com/parallel101/course 上期回顾: https://www.bilibili.com/video/BV1m34y157wb 课程安排 1. vector 容器初体验 & 迭代器入门 (BV1qF411T7sd) 2. 你所不知道的 map 容器全家桶及其妙用举例 5. 函子 functor 与 lambda 表达式知多少 6. 通过实战案例来学习 STL 算法库 7. C++ 标准输入输出流 & 字符串格式化 8. traits 技术,用户自定义迭代器与算法 9. allocator ,内存管理与对象生命周期 ASCII 码 第 1 章 计算机如何表达字符 https://zh.wikipedia , ^H 就是 ‘ \b’ ,所以以前原始的计算机键盘上其 实还没有 Enter 键,大家都是按 Ctrl+J 来换行的… … • 不过,如果直接在控制台输入 ‘ ^’ 和 ‘ C’ 两个字符并 没有 Ctrl+C 的效果哦!因为 ‘ ^C’ 是 Ctrl+C 输入之 后一次性显示出来的,并不是真的说 Ctrl 就是 ‘ ^’ 这 个字符。 C 语言字符串 第 2 章 C 语言中的字符类型0 码力 | 162 页 | 40.20 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 15 C++ 系列课:字符与字符串C++ 系列课:字符与字符串 by 小彭老师( @archibate ) 课件 & 代码: https://github.com/parallel101/course 上期回顾: https://www.bilibili.com/video/BV1m34y157wb 课程安排 1. vector 容器初体验 & 迭代器入门 (BV1qF411T7sd) 2. 你所不知道的 map 容器全家桶及其妙用举例 5. 函子 functor 与 lambda 表达式知多少 6. 通过实战案例来学习 STL 算法库 7. C++ 标准输入输出流 & 字符串格式化 8. traits 技术,用户自定义迭代器与算法 9. allocator ,内存管理与对象生命周期 ASCII 码 第 1 章 计算机如何表达字符 https://zh.wikipedia , ^H 就是 ‘ \b’ ,所以以前原始的计算机键盘上其 实还没有 Enter 键,大家都是按 Ctrl+J 来换行的… … • 不过,如果直接在控制台输入 ‘ ^’ 和 ‘ C’ 两个字符并 没有 Ctrl+C 的效果哦!因为 ‘ ^C’ 是 Ctrl+C 输入之 后一次性显示出来的,并不是真的说 Ctrl 就是 ‘ ^’ 这 个字符。 C 语言字符串 第 2 章 C 语言中的字符类型0 码力 | 162 页 | 40.20 MB | 1 年前3
 《深入浅出MFC》2/eccu.edu.tw:Inside Visual C++ 4.0 不是初学者用的书,因为它未从 最基本观念讲起。深入浅出MFC 前半本都在描述(或说仿真) MFC 的内部技术,甚至挖 出MFC 部份原始程序代码来说明,透过这本书来学MFC 会学得很扎实,不过自己要先 对Windows 这个操作系统的运作方式有一程度的了解,不然会看不懂,以某方面来说, 也不是初学者用的书。基本上侯俊杰写的书不论文笔或是内容都相当的好,相当有购买 LIB) / 347 需要什麼含入檔(.H) / 349 簡化的 MFC 程式架構 - 以 Hello MFC 為例 / 351 Hello 程式原始碼 / 352 MFC 程式的來龍去脈 / 357 我只借用兩個類別:CWinApp 和 CFrameWnd / 358 CWinApp 843 附錄 A 無責任書評:從搖籃到墳墓 - Windows 的完全學習 / 845 * 無責任書評:MFC ㆕大㆝王 / 856 附錄 B Scribble Step5 程式原始碼列表 / 873 附錄 C Visual C++ 5.0 MFC 範例程式總覽 / 915 * 附錄 D 以 MFC 重建 Debug Window(DBWIN) / 921 第0章 你㆒定要知道(導讀)0 码力 | 1009 页 | 11.08 MB | 1 年前3 《深入浅出MFC》2/eccu.edu.tw:Inside Visual C++ 4.0 不是初学者用的书,因为它未从 最基本观念讲起。深入浅出MFC 前半本都在描述(或说仿真) MFC 的内部技术,甚至挖 出MFC 部份原始程序代码来说明,透过这本书来学MFC 会学得很扎实,不过自己要先 对Windows 这个操作系统的运作方式有一程度的了解,不然会看不懂,以某方面来说, 也不是初学者用的书。基本上侯俊杰写的书不论文笔或是内容都相当的好,相当有购买 LIB) / 347 需要什麼含入檔(.H) / 349 簡化的 MFC 程式架構 - 以 Hello MFC 為例 / 351 Hello 程式原始碼 / 352 MFC 程式的來龍去脈 / 357 我只借用兩個類別:CWinApp 和 CFrameWnd / 358 CWinApp 843 附錄 A 無責任書評:從搖籃到墳墓 - Windows 的完全學習 / 845 * 無責任書評:MFC ㆕大㆝王 / 856 附錄 B Scribble Step5 程式原始碼列表 / 873 附錄 C Visual C++ 5.0 MFC 範例程式總覽 / 915 * 附錄 D 以 MFC 重建 Debug Window(DBWIN) / 921 第0章 你㆒定要知道(導讀)0 码力 | 1009 页 | 11.08 MB | 1 年前3
 现代C++ 教程:高速上手C++11/14/17/20. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 原始字符串字面量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 自定义字面量 . . 注意:弃用并非彻底不能用,只是用于暗示程序员这些特性将从未来的标准中消失,应该尽 量避免使用。但是,已弃用的特性依然是标准库的一部分,并且出于兼容性的考虑,大部分 特性其实会『永久』保留。 • 不再允许字符串字面值常量赋值给一个 char *。如果需要用字符串字面值常量赋值和初始化一个 char *,应该使用 const char * 或者 auto。 char *str = "hello world!"; // 将出现弃用警告 rvalue),纯粹的右值,要么是纯粹的字面量,例如 10, true;要么是求值结 果相当于字面量或匿名临时对象,例如 1+2。非引用返回的临时变量、运算表达式产生的临时变量、原始 字面量、Lambda 表达式都属于纯右值。 需要注意的是,字面量除了字符串字面量以外,均为纯右值。而字符串字面量是一个左值,类型为 const char 数组。例如: #include 现代C++ 教程:高速上手C++11/14/17/20. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 原始字符串字面量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 自定义字面量 . . 注意:弃用并非彻底不能用,只是用于暗示程序员这些特性将从未来的标准中消失,应该尽 量避免使用。但是,已弃用的特性依然是标准库的一部分,并且出于兼容性的考虑,大部分 特性其实会『永久』保留。 • 不再允许字符串字面值常量赋值给一个 char *。如果需要用字符串字面值常量赋值和初始化一个 char *,应该使用 const char * 或者 auto。 char *str = "hello world!"; // 将出现弃用警告 rvalue),纯粹的右值,要么是纯粹的字面量,例如 10, true;要么是求值结 果相当于字面量或匿名临时对象,例如 1+2。非引用返回的临时变量、运算表达式产生的临时变量、原始 字面量、Lambda 表达式都属于纯右值。 需要注意的是,字面量除了字符串字面量以外,均为纯右值。而字符串字面量是一个左值,类型为 const char 数组。例如: #include- int main() { // 0 码力 | 83 页 | 2.42 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 12 从计算机组成原理看 C 语言指针化的。 • 如果 64 位系统上 size_t 还是 uint32_t ,那就无法表示超过 4GB 大小的数组了。 • 今日乳 ja 笑话: java 的字符串常量不能超过 65535 个字符,因为他们是用 uint16_t 表示字符串长 度。 • 因此对于表示”长度”、”大小”的用途,可以用 size_t 这个直观的名字,他和 uintptr_t 等价 。 • size_t 是标准库大量使用的用于表示大小的类型,例如 类似于人类的科学计数法,不过是二进制。 著名的“快速浮点平方根算法” • 这个算法是 99 年被人从一个游戏源码中扒 出来的,作者号称是游戏界的大神卡马克 ,但是追根溯源,貌似这个算法存在的还 要更久远,原始作者已不可考,暂且称为 卡马克算法。 • 实际上就是把指数位除以了 2 ,作为牛顿 迭代的初始猜测值而已。看他的 i >> 1 这 里,就是把指数和底数都移动了 1 (因为 符号始终是无符号,底数影响不大)。 0 。 • 这其实是两个 bug 共同作用的结果。 printf 的错误:不会编译时检测参数类型是否正确 • 第一个 bug 是, printf 其实不知道他的参数是什 么类型,他只看到你字符串里写的 “ %f” ,会误以 为输入的是 float 参数。 • 如果你输入的是 3 这样的 int 类型常量, C 语 言不会帮你检测到他和 “ %f” 其实是不匹配的,而 是直接把 int0 码力 | 128 页 | 2.95 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 12 从计算机组成原理看 C 语言指针化的。 • 如果 64 位系统上 size_t 还是 uint32_t ,那就无法表示超过 4GB 大小的数组了。 • 今日乳 ja 笑话: java 的字符串常量不能超过 65535 个字符,因为他们是用 uint16_t 表示字符串长 度。 • 因此对于表示”长度”、”大小”的用途,可以用 size_t 这个直观的名字,他和 uintptr_t 等价 。 • size_t 是标准库大量使用的用于表示大小的类型,例如 类似于人类的科学计数法,不过是二进制。 著名的“快速浮点平方根算法” • 这个算法是 99 年被人从一个游戏源码中扒 出来的,作者号称是游戏界的大神卡马克 ,但是追根溯源,貌似这个算法存在的还 要更久远,原始作者已不可考,暂且称为 卡马克算法。 • 实际上就是把指数位除以了 2 ,作为牛顿 迭代的初始猜测值而已。看他的 i >> 1 这 里,就是把指数和底数都移动了 1 (因为 符号始终是无符号,底数影响不大)。 0 。 • 这其实是两个 bug 共同作用的结果。 printf 的错误:不会编译时检测参数类型是否正确 • 第一个 bug 是, printf 其实不知道他的参数是什 么类型,他只看到你字符串里写的 “ %f” ,会误以 为输入的是 float 参数。 • 如果你输入的是 3 这样的 int 类型常量, C 语 言不会帮你检测到他和 “ %f” 其实是不匹配的,而 是直接把 int0 码力 | 128 页 | 2.95 MB | 1 年前3
 Hello 算法 1.0.0b4 C++版例如“归并排序”算法,输入长度为 ? 的数组,每轮递归将数组从中点划分为两半,形成高度为 log ? 的递 归树,使用 ?(log ?) 栈帧空间。 再例如“数字转化为字符串”,输入任意正整数 ? ,它的位数为 log10 ? ,即对应字符串长度为 log10 ? ,因 此空间复杂度为 ?(log10 ?) = ?(log ?) 。 2.3.4. 权衡时间与空间 理想情况下,我们希望算法的时间复杂 5. 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 UTF‑16 或 UTF‑32 这类等长的编码。这是因为在 等长编码下,我们可以将字符串看作数组来处理,具体来说: ‧ 随机访问: UTF‑16 编码的字符串可以很容易地进行随机访问。UTF‑8 是一种变长编码,要找到第 ? 个 字符,我们需要从字符串的开始处遍历到第 ? 个字符,这需要 ?(?) 的时间。 ‧ 字符计数: 字符计数: 与随机访问类似,计算 UTF‑16 字符串的长度也是 ?(1) 的操作。但是,计算 UTF‑8 编码的 字符串的长度需要遍历整个字符串。 ‧ 字符串操作: 在 UTF‑16 编码的字符串中,很多字符串操作(如分割、连接、插入、删除等)都更容易进 行。在 UTF‑8 编码的字符串上进行这些操作通常需要额外的计算,以确保不会产生无效的 UTF‑8 编码。 编程语言的字符编码方案设计是一个很有趣的话题,涉及到许多因素:0 码力 | 343 页 | 27.39 MB | 1 年前3 Hello 算法 1.0.0b4 C++版例如“归并排序”算法,输入长度为 ? 的数组,每轮递归将数组从中点划分为两半,形成高度为 log ? 的递 归树,使用 ?(log ?) 栈帧空间。 再例如“数字转化为字符串”,输入任意正整数 ? ,它的位数为 log10 ? ,即对应字符串长度为 log10 ? ,因 此空间复杂度为 ?(log10 ?) = ?(log ?) 。 2.3.4. 权衡时间与空间 理想情况下,我们希望算法的时间复杂 5. 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 UTF‑16 或 UTF‑32 这类等长的编码。这是因为在 等长编码下,我们可以将字符串看作数组来处理,具体来说: ‧ 随机访问: UTF‑16 编码的字符串可以很容易地进行随机访问。UTF‑8 是一种变长编码,要找到第 ? 个 字符,我们需要从字符串的开始处遍历到第 ? 个字符,这需要 ?(?) 的时间。 ‧ 字符计数: 字符计数: 与随机访问类似,计算 UTF‑16 字符串的长度也是 ?(1) 的操作。但是,计算 UTF‑8 编码的 字符串的长度需要遍历整个字符串。 ‧ 字符串操作: 在 UTF‑16 编码的字符串中,很多字符串操作(如分割、连接、插入、删除等)都更容易进 行。在 UTF‑8 编码的字符串上进行这些操作通常需要额外的计算,以确保不会产生无效的 UTF‑8 编码。 编程语言的字符编码方案设计是一个很有趣的话题,涉及到许多因素:0 码力 | 343 页 | 27.39 MB | 1 年前3
 Hello 算法 1.1.0 C++ 版对数阶常见于分治算法。例如归并排序,输入长度为 ? 的数组,每轮递归将数组从中点处划分为两半,形成 高度为 log ? 的递归树,使用 ?(log ?) 栈帧空间。 再例如将数字转化为字符串,输入一个正整数 ? ,它的位数为 ⌊log10 ?⌋ + 1 ,即对应字符串长度为 ⌊log10 ?⌋ + 1 ,因此空间复杂度为 ?(log10 ? + 1) = ?(log ?) 。 2.4.4 权衡时间与空间 理想情况下,我 空间、取值范围和默认值可能会有所不同。 ‧ 在 Python 中,整数类型 int 可以是任意大小,只受限于可用内存;浮点数 float 是双精度 64 位;没 有 char 类型,单个字符实际上是长度为 1 的字符串 str 。 ‧ C 和 C++ 未明确规定基本数据类型的大小,而因实现和平台各异。表 3‑1 遵循 LP64 数据模型,其用于 包括 Linux 和 macOS 在内的 Unix 64 位操作系统。 5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 UTF‑16 或 UTF‑32 这类等长编码。在等长编码下, 我们可以将字符串看作数组来处理,这种做法具有以下优点。 ‧ 随机访问:UTF‑16 编码的字符串可以很容易地进行随机访问。UTF‑8 是一种变长编码,要想找到第 ? 个字符,我们需要从字符串的开始处遍历到第 ? 个字符,这需要 ?(?) 的时间。 ‧ 字符计数:与随机访问类似,计算0 码力 | 379 页 | 18.47 MB | 1 年前3 Hello 算法 1.1.0 C++ 版对数阶常见于分治算法。例如归并排序,输入长度为 ? 的数组,每轮递归将数组从中点处划分为两半,形成 高度为 log ? 的递归树,使用 ?(log ?) 栈帧空间。 再例如将数字转化为字符串,输入一个正整数 ? ,它的位数为 ⌊log10 ?⌋ + 1 ,即对应字符串长度为 ⌊log10 ?⌋ + 1 ,因此空间复杂度为 ?(log10 ? + 1) = ?(log ?) 。 2.4.4 权衡时间与空间 理想情况下,我 空间、取值范围和默认值可能会有所不同。 ‧ 在 Python 中,整数类型 int 可以是任意大小,只受限于可用内存;浮点数 float 是双精度 64 位;没 有 char 类型,单个字符实际上是长度为 1 的字符串 str 。 ‧ C 和 C++ 未明确规定基本数据类型的大小,而因实现和平台各异。表 3‑1 遵循 LP64 数据模型,其用于 包括 Linux 和 macOS 在内的 Unix 64 位操作系统。 5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 UTF‑16 或 UTF‑32 这类等长编码。在等长编码下, 我们可以将字符串看作数组来处理,这种做法具有以下优点。 ‧ 随机访问:UTF‑16 编码的字符串可以很容易地进行随机访问。UTF‑8 是一种变长编码,要想找到第 ? 个字符,我们需要从字符串的开始处遍历到第 ? 个字符,这需要 ?(?) 的时间。 ‧ 字符计数:与随机访问类似,计算0 码力 | 379 页 | 18.47 MB | 1 年前3
 Hello 算法 1.0.0 C++版对数阶常见于分治算法。例如归并排序,输入长度为 ? 的数组,每轮递归将数组从中点处划分为两半,形成 高度为 log ? 的递归树,使用 ?(log ?) 栈帧空间。 再例如将数字转化为字符串,输入一个正整数 ? ,它的位数为 ⌊log10 ?⌋ + 1 ,即对应字符串长度为 ⌊log10 ?⌋ + 1 ,因此空间复杂度为 ?(log10 ? + 1) = ?(log ?) 。 2.4.4 权衡时间与空间 理想情况下,我 空间、取值范围和默认值可能会有所不同。 ‧ 在 Python 中,整数类型 int 可以是任意大小,只受限于可用内存;浮点数 float 是双精度 64 位;没 有 char 类型,单个字符实际上是长度为 1 的字符串 str 。 ‧ C 和 C++ 未明确规定基本数据类型的大小,而因实现和平台各异。表 3‑1 遵循 LP64 数据模型,其用于 包括 Linux 和 macOS 在内的 Unix 64 位操作系统。 5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 UTF‑16 或 UTF‑32 这类等长编码。在等长编码下, 我们可以将字符串看作数组来处理,这种做法具有以下优点。 ‧ 随机访问:UTF‑16 编码的字符串可以很容易地进行随机访问。UTF‑8 是一种变长编码,要想找到第 ? 个字符,我们需要从字符串的开始处遍历到第 ? 个字符,这需要 ?(?) 的时间。 ‧ 字符计数:与随机访问类似,计算0 码力 | 378 页 | 17.59 MB | 1 年前3 Hello 算法 1.0.0 C++版对数阶常见于分治算法。例如归并排序,输入长度为 ? 的数组,每轮递归将数组从中点处划分为两半,形成 高度为 log ? 的递归树,使用 ?(log ?) 栈帧空间。 再例如将数字转化为字符串,输入一个正整数 ? ,它的位数为 ⌊log10 ?⌋ + 1 ,即对应字符串长度为 ⌊log10 ?⌋ + 1 ,因此空间复杂度为 ?(log10 ? + 1) = ?(log ?) 。 2.4.4 权衡时间与空间 理想情况下,我 空间、取值范围和默认值可能会有所不同。 ‧ 在 Python 中,整数类型 int 可以是任意大小,只受限于可用内存;浮点数 float 是双精度 64 位;没 有 char 类型,单个字符实际上是长度为 1 的字符串 str 。 ‧ C 和 C++ 未明确规定基本数据类型的大小,而因实现和平台各异。表 3‑1 遵循 LP64 数据模型,其用于 包括 Linux 和 macOS 在内的 Unix 64 位操作系统。 5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 UTF‑16 或 UTF‑32 这类等长编码。在等长编码下, 我们可以将字符串看作数组来处理,这种做法具有以下优点。 ‧ 随机访问:UTF‑16 编码的字符串可以很容易地进行随机访问。UTF‑8 是一种变长编码,要想找到第 ? 个字符,我们需要从字符串的开始处遍历到第 ? 个字符,这需要 ?(?) 的时间。 ‧ 字符计数:与随机访问类似,计算0 码力 | 378 页 | 17.59 MB | 1 年前3
 Hello 算法 1.0.0b5 C++版对数阶常见于分治算法。例如归并排序,输入长度为 ? 的数组,每轮递归将数组从中点划分为两半,形成高 度为 log ? 的递归树,使用 ?(log ?) 栈帧空间。 再例如将数字转化为字符串,输入一个正整数 ? ,它的位数为 log10 ?+1 ,即对应字符串长度为 log10 ?+1 ,因此空间复杂度为 ?(log10 ? + 1) = ?(log ?) 。 2.4.4 权衡时间与空间 理想情况下,我们希望算法 5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 UTF‑16 或 UTF‑32 这类等长的编码。在等长编码 下,我们可以将字符串看作数组来处理,这种做法具有以下优点。 ‧ 随机访问: UTF‑16 编码的字符串可以很容易地进行随机访问。UTF‑8 是一种变长编码,要找到第 ? 个 字符,我们需要从字符串的开始处遍历到第 ? 个字符,这需要 ?(?) 的时间。 ‧ ‧ 字符计数: 与随机访问类似,计算 UTF‑16 字符串的长度也是 ?(1) 的操作。但是,计算 UTF‑8 编码的 字符串的长度需要遍历整个字符串。 ‧ 字符串操作: 在 UTF‑16 编码的字符串中,很多字符串操作(如分割、连接、插入、删除等)都更容易进 行。在 UTF‑8 编码的字符串上进行这些操作通常需要额外的计算,以确保不会产生无效的 UTF‑8 编码。 实际上,编程语言的字符编0 码力 | 377 页 | 30.69 MB | 1 年前3 Hello 算法 1.0.0b5 C++版对数阶常见于分治算法。例如归并排序,输入长度为 ? 的数组,每轮递归将数组从中点划分为两半,形成高 度为 log ? 的递归树,使用 ?(log ?) 栈帧空间。 再例如将数字转化为字符串,输入一个正整数 ? ,它的位数为 log10 ?+1 ,即对应字符串长度为 log10 ?+1 ,因此空间复杂度为 ?(log10 ? + 1) = ?(log ?) 。 2.4.4 权衡时间与空间 理想情况下,我们希望算法 5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 UTF‑16 或 UTF‑32 这类等长的编码。在等长编码 下,我们可以将字符串看作数组来处理,这种做法具有以下优点。 ‧ 随机访问: UTF‑16 编码的字符串可以很容易地进行随机访问。UTF‑8 是一种变长编码,要找到第 ? 个 字符,我们需要从字符串的开始处遍历到第 ? 个字符,这需要 ?(?) 的时间。 ‧ ‧ 字符计数: 与随机访问类似,计算 UTF‑16 字符串的长度也是 ?(1) 的操作。但是,计算 UTF‑8 编码的 字符串的长度需要遍历整个字符串。 ‧ 字符串操作: 在 UTF‑16 编码的字符串中,很多字符串操作(如分割、连接、插入、删除等)都更容易进 行。在 UTF‑8 编码的字符串上进行这些操作通常需要额外的计算,以确保不会产生无效的 UTF‑8 编码。 实际上,编程语言的字符编0 码力 | 377 页 | 30.69 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 C++ 版对数阶常见于分治算法。例如归并排序,输入长度为 ? 的数组,每轮递归将数组从中点处划分为两半,形成 高度为 log ? 的递归树,使用 ?(log ?) 栈帧空间。 再例如将数字转化为字符串,输入一个正整数 ? ,它的位数为 ⌊log10 ?⌋ + 1 ,即对应字符串长度为 ⌊log10 ?⌋ + 1 ,因此空间复杂度为 ?(log10 ? + 1) = ?(log ?) 。 2.4.4 权衡时间与空间 理想情况下,我 空间、取值范围和默认值可能会有所不同。 ‧ 在 Python 中,整数类型 int 可以是任意大小,只受限于可用内存;浮点数 float 是双精度 64 位;没 有 char 类型,单个字符实际上是长度为 1 的字符串 str 。 ‧ C 和 C++ 未明确规定基本数据类型的大小,而因实现和平台各异。表 3‑1 遵循 LP64 数据模型,其用于 包括 Linux 和 macOS 在内的 Unix 64 位操作系统。 5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 UTF‑16 或 UTF‑32 这类等长编码。在等长编码下, 我们可以将字符串看作数组来处理,这种做法具有以下优点。 ‧ 随机访问:UTF‑16 编码的字符串可以很容易地进行随机访问。UTF‑8 是一种变长编码,要想找到第 ? 个字符,我们需要从字符串的开始处遍历到第 ? 个字符,这需要 ?(?) 的时间。 ‧ 字符计数:与随机访问类似,计算0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 C++ 版对数阶常见于分治算法。例如归并排序,输入长度为 ? 的数组,每轮递归将数组从中点处划分为两半,形成 高度为 log ? 的递归树,使用 ?(log ?) 栈帧空间。 再例如将数字转化为字符串,输入一个正整数 ? ,它的位数为 ⌊log10 ?⌋ + 1 ,即对应字符串长度为 ⌊log10 ?⌋ + 1 ,因此空间复杂度为 ?(log10 ? + 1) = ?(log ?) 。 2.4.4 权衡时间与空间 理想情况下,我 空间、取值范围和默认值可能会有所不同。 ‧ 在 Python 中,整数类型 int 可以是任意大小,只受限于可用内存;浮点数 float 是双精度 64 位;没 有 char 类型,单个字符实际上是长度为 1 的字符串 str 。 ‧ C 和 C++ 未明确规定基本数据类型的大小,而因实现和平台各异。表 3‑1 遵循 LP64 数据模型,其用于 包括 Linux 和 macOS 在内的 Unix 64 位操作系统。 5 编程语言的字符编码 对于以往的大多数编程语言,程序运行中的字符串都采用 UTF‑16 或 UTF‑32 这类等长编码。在等长编码下, 我们可以将字符串看作数组来处理,这种做法具有以下优点。 ‧ 随机访问:UTF‑16 编码的字符串可以很容易地进行随机访问。UTF‑8 是一种变长编码,要想找到第 ? 个字符,我们需要从字符串的开始处遍历到第 ? 个字符,这需要 ?(?) 的时间。 ‧ 字符计数:与随机访问类似,计算0 码力 | 379 页 | 18.48 MB | 10 月前3
 C++高性能并行编程与优化 -  课件 - 13 C++ STL 容器全解之 vector的这个显式构造函数,默认会把所有元 素都初始化为 0 (不必手动去 memset )。 • 如果是其他自定义类,则会调用元素的默认构造 函数(例如:数字类型会初始化为 0 , string 会初始化为空字符串,指针类型会初始化为 nullptr ) • explicit vector(size_t n); vector 容器:构造函数 • 这个显式构造函数还可以指定第二个参数,这样 就可以用 返回的首地址指针,通常配合 size() 返回的数组长度一起使用(见上一课《 C 语言指针》中提到,连续的动态数组只需要 知道首地址和数组长度即可完全确定)。 • 用他来获取一个 C 语言原始指针 int * , 很方便用于调用 C 语言的函数和 API 等 ,同时还能享受到 vector 容器 RAII 的安 全性。 • ~vector() noexcept; vector 容器:0 码力 | 90 页 | 4.93 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 13 C++ STL 容器全解之 vector的这个显式构造函数,默认会把所有元 素都初始化为 0 (不必手动去 memset )。 • 如果是其他自定义类,则会调用元素的默认构造 函数(例如:数字类型会初始化为 0 , string 会初始化为空字符串,指针类型会初始化为 nullptr ) • explicit vector(size_t n); vector 容器:构造函数 • 这个显式构造函数还可以指定第二个参数,这样 就可以用 返回的首地址指针,通常配合 size() 返回的数组长度一起使用(见上一课《 C 语言指针》中提到,连续的动态数组只需要 知道首地址和数组长度即可完全确定)。 • 用他来获取一个 C 语言原始指针 int * , 很方便用于调用 C 语言的函数和 API 等 ,同时还能享受到 vector 容器 RAII 的安 全性。 • ~vector() noexcept; vector 容器:0 码力 | 90 页 | 4.93 MB | 1 年前3
共 26 条
- 1
- 2
- 3













