 Hello 算法 1.1.0 C++ 版字节,在大多数编程语言中取决于特定的字符编码方法,详见“字 符编码”章节。 ‧ 即使表示布尔量仅需 1 位(0 或 1),它在内存中通常也存储为 1 字节。这是因为现代计算机 CPU 通常 将 1 字节作为最小寻址内存单元。 那么,基本数据类型与数据结构之间有什么联系呢?我们知道,数据结构是在计算机中组织与存储数据的方 式。这句话的主语是“结构”而非“数据”。 如果想表示“一排数字”,我们自然会想到使用数 以采用以下策略。 1. 改良哈希表数据结构,使得哈希表可以在出现哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括“链式地址”和“开放寻址”。 6.2.1 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。链式地址(separate chaining)将单个元素转换为链表,将键 值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。图 树”或“红黑树”,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 开放寻址(open addressing)不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测和多次哈希等。 第 6 章 哈希表 hello‑algo.com 125 下面以线性探测为例,介绍开放寻址哈希表的工作机制。 1. 线性探测 线性探测采用固定步长的线性搜索0 码力 | 379 页 | 18.47 MB | 1 年前3 Hello 算法 1.1.0 C++ 版字节,在大多数编程语言中取决于特定的字符编码方法,详见“字 符编码”章节。 ‧ 即使表示布尔量仅需 1 位(0 或 1),它在内存中通常也存储为 1 字节。这是因为现代计算机 CPU 通常 将 1 字节作为最小寻址内存单元。 那么,基本数据类型与数据结构之间有什么联系呢?我们知道,数据结构是在计算机中组织与存储数据的方 式。这句话的主语是“结构”而非“数据”。 如果想表示“一排数字”,我们自然会想到使用数 以采用以下策略。 1. 改良哈希表数据结构,使得哈希表可以在出现哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括“链式地址”和“开放寻址”。 6.2.1 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。链式地址(separate chaining)将单个元素转换为链表,将键 值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。图 树”或“红黑树”,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 开放寻址(open addressing)不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测和多次哈希等。 第 6 章 哈希表 hello‑algo.com 125 下面以线性探测为例,介绍开放寻址哈希表的工作机制。 1. 线性探测 线性探测采用固定步长的线性搜索0 码力 | 379 页 | 18.47 MB | 1 年前3
 Hello 算法 1.0.0 C++版字节,在大多数编程语言中取决于特定的字符编码方法,详见“字 符编码”章节。 ‧ 即使表示布尔量仅需 1 位(0 或 1),它在内存中通常也存储为 1 字节。这是因为现代计算机 CPU 通常 将 1 字节作为最小寻址内存单元。 那么,基本数据类型与数据结构之间有什么联系呢?我们知道,数据结构是在计算机中组织与存储数据的方 式。这句话的主语是“结构”而非“数据”。 如果想表示“一排数字”,我们自然会想到使用数 以采用以下策略。 1. 改良哈希表数据结构,使得哈希表可以在出现哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括“链式地址”和“开放寻址”。 6.2.1 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。「链式地址 separate chaining」将单个元素转换为链表,将 键值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。图 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 「开放寻址 open addressing」不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测和多次哈希等。 第 6 章 哈希表 hello‑algo.com 125 下面以线性探测为例,介绍开放寻址哈希表的工作机制。 1. 线性探测 线性探测采用固定步长的线性搜索0 码力 | 378 页 | 17.59 MB | 1 年前3 Hello 算法 1.0.0 C++版字节,在大多数编程语言中取决于特定的字符编码方法,详见“字 符编码”章节。 ‧ 即使表示布尔量仅需 1 位(0 或 1),它在内存中通常也存储为 1 字节。这是因为现代计算机 CPU 通常 将 1 字节作为最小寻址内存单元。 那么,基本数据类型与数据结构之间有什么联系呢?我们知道,数据结构是在计算机中组织与存储数据的方 式。这句话的主语是“结构”而非“数据”。 如果想表示“一排数字”,我们自然会想到使用数 以采用以下策略。 1. 改良哈希表数据结构,使得哈希表可以在出现哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括“链式地址”和“开放寻址”。 6.2.1 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。「链式地址 separate chaining」将单个元素转换为链表,将 键值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。图 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 「开放寻址 open addressing」不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测和多次哈希等。 第 6 章 哈希表 hello‑algo.com 125 下面以线性探测为例,介绍开放寻址哈希表的工作机制。 1. 线性探测 线性探测采用固定步长的线性搜索0 码力 | 378 页 | 17.59 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 C++ 版字节,在大多数编程语言中取决于特定的字符编码方法,详见“字 符编码”章节。 ‧ 即使表示布尔量仅需 1 位(0 或 1),它在内存中通常也存储为 1 字节。这是因为现代计算机 CPU 通常 将 1 字节作为最小寻址内存单元。 那么,基本数据类型与数据结构之间有什么联系呢?我们知道,数据结构是在计算机中组织与存储数据的方 式。这句话的主语是“结构”而非“数据”。 如果想表示“一排数字”,我们自然会想到使用数 以采用以下策略。 1. 改良哈希表数据结构,使得哈希表可以在出现哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括“链式地址”和“开放寻址”。 6.2.1 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。链式地址(separate chaining)将单个元素转换为链表,将键 值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。图 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 开放寻址(open addressing)不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测和多次哈希等。 第 6 章 哈希表 www.hello‑algo.com 125 下面以线性探测为例,介绍开放寻址哈希表的工作机制。 1. 线性探测 线性探测采用固定步长的线性0 码力 | 379 页 | 18.48 MB | 10 月前3 Hello 算法 1.2.0 简体中文 C++ 版字节,在大多数编程语言中取决于特定的字符编码方法,详见“字 符编码”章节。 ‧ 即使表示布尔量仅需 1 位(0 或 1),它在内存中通常也存储为 1 字节。这是因为现代计算机 CPU 通常 将 1 字节作为最小寻址内存单元。 那么,基本数据类型与数据结构之间有什么联系呢?我们知道,数据结构是在计算机中组织与存储数据的方 式。这句话的主语是“结构”而非“数据”。 如果想表示“一排数字”,我们自然会想到使用数 以采用以下策略。 1. 改良哈希表数据结构,使得哈希表可以在出现哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括“链式地址”和“开放寻址”。 6.2.1 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。链式地址(separate chaining)将单个元素转换为链表,将键 值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。图 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 开放寻址(open addressing)不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测和多次哈希等。 第 6 章 哈希表 www.hello‑algo.com 125 下面以线性探测为例,介绍开放寻址哈希表的工作机制。 1. 线性探测 线性探测采用固定步长的线性0 码力 | 379 页 | 18.48 MB | 10 月前3
 Hello 算法 1.0.0b5 C++版字节,在大多数编程语言中取决于特定的字符编码方法,详见“字 符编码”章节。 ‧ 即使表示布尔量仅需 1 位(0 或 1),它在内存中通常被存储为 1 字节。这是因为现代计算机 CPU 通常 将 1 字节作为最小寻址内存单元。 那么,基本数据类型与数据结构之间有什么联系呢?我们知道,数据结构是在计算机中组织与存储数据的方 式。它的主语是“结构”而非“数据”。 如果想要表示“一排数字”,我们自然会想到使用数 以采用以下策略。 1. 改良哈希表数据结构,使得哈希表可以在存在哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括“链式地址”和“开放寻址”。 6.2.1 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。「链式地址 separate chaining」将单个元素转换为链表,将 键值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。图 } }; 值得注意的是,当链表很长时,查询效率 ?(?) 很差。此时可以将链表转换为“AVL 树”或“红黑树”,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 「开放寻址 open addressing」不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测、多次哈希等。 1. 线性探测 线性探测采用固定步长的线0 码力 | 377 页 | 30.69 MB | 1 年前3 Hello 算法 1.0.0b5 C++版字节,在大多数编程语言中取决于特定的字符编码方法,详见“字 符编码”章节。 ‧ 即使表示布尔量仅需 1 位(0 或 1),它在内存中通常被存储为 1 字节。这是因为现代计算机 CPU 通常 将 1 字节作为最小寻址内存单元。 那么,基本数据类型与数据结构之间有什么联系呢?我们知道,数据结构是在计算机中组织与存储数据的方 式。它的主语是“结构”而非“数据”。 如果想要表示“一排数字”,我们自然会想到使用数 以采用以下策略。 1. 改良哈希表数据结构,使得哈希表可以在存在哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括“链式地址”和“开放寻址”。 6.2.1 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。「链式地址 separate chaining」将单个元素转换为链表,将 键值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。图 } }; 值得注意的是,当链表很长时,查询效率 ?(?) 很差。此时可以将链表转换为“AVL 树”或“红黑树”,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2 开放寻址 「开放寻址 open addressing」不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式主 要包括线性探测、平方探测、多次哈希等。 1. 线性探测 线性探测采用固定步长的线0 码力 | 377 页 | 30.69 MB | 1 年前3
 Hello 算法 1.0.0b4 C++版0 布尔 bool 1 byte false true false � 字符的占用空间大小取决于编程语言采用的字符编码方法,详见「字符编码」章节。 现代计算机 CPU 通常将 1 字节作为最小寻址内存单元。因此,即使表示布尔量仅需 1 位(0 或 1),它在内存中通常被存储为 1 字节。 那么,基本数据类型与数据结构之间有什么联系与区别呢?我们知道,数据结构是在计算机中组织与存储数 据 的数据搬运与哈希值计算。为了提升效率,我们切换一下思路: 1. 改良哈希表数据结构,使得哈希表可以在存在哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括链式地址和开放寻址。 6.2.1. 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。「链式地址 Separate Chaining」将单个元素转换为链表,将 键值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。 com 102 � 当链表很长时,查询效率 ?(?) 很差,此时可以将链表转换为「AVL 树」或「红黑树」,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2. 开放寻址 「开放寻址 Open Addressing」不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式 主要包括线性探测、平方探测、多次哈希等。 线性探测 线性探测采用固定步长的线性查找来进行探测,对应的哈希表操作方法为:0 码力 | 343 页 | 27.39 MB | 1 年前3 Hello 算法 1.0.0b4 C++版0 布尔 bool 1 byte false true false � 字符的占用空间大小取决于编程语言采用的字符编码方法,详见「字符编码」章节。 现代计算机 CPU 通常将 1 字节作为最小寻址内存单元。因此,即使表示布尔量仅需 1 位(0 或 1),它在内存中通常被存储为 1 字节。 那么,基本数据类型与数据结构之间有什么联系与区别呢?我们知道,数据结构是在计算机中组织与存储数 据 的数据搬运与哈希值计算。为了提升效率,我们切换一下思路: 1. 改良哈希表数据结构,使得哈希表可以在存在哈希冲突时正常工作。 2. 仅在必要时,即当哈希冲突比较严重时,才执行扩容操作。 哈希表的结构改良方法主要包括链式地址和开放寻址。 6.2.1. 链式地址 在原始哈希表中,每个桶仅能存储一个键值对。「链式地址 Separate Chaining」将单个元素转换为链表,将 键值对作为链表节点,将所有发生冲突的键值对都存储在同一链表中。 com 102 � 当链表很长时,查询效率 ?(?) 很差,此时可以将链表转换为「AVL 树」或「红黑树」,从而 将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.2. 开放寻址 「开放寻址 Open Addressing」不引入额外的数据结构,而是通过“多次探测”来处理哈希冲突,探测方式 主要包括线性探测、平方探测、多次哈希等。 线性探测 线性探测采用固定步长的线性查找来进行探测,对应的哈希表操作方法为:0 码力 | 343 页 | 27.39 MB | 1 年前3
 Hello 算法 1.0.0b1 C++版扩容来减小冲突概率。极端情况下,当输入空间和输出空间 大小相等时,哈希表就等价于数组了,可谓“大力出奇迹”。 另一方面,考虑通过优化哈希表的表示方式以缓解哈希冲突,常见的方法有「链式地址」和「开放寻址」。 6. 散列表 hello‑algo.com 88 6.2.1. 哈希表扩容 「负载因子 Load Factor」定义为 哈希表中元素数量除以桶槽数量(即数组大小),代表哈希冲突的严重程度。 为了提升操作效率,可以把「链表」转化为「AVL 树」或「红黑树」,将查询操作的时间复杂度优化至 ?(log ?) 。 6. 散列表 hello‑algo.com 89 6.2.3. 开放寻址 「开放寻址」不引入额外数据结构,而是通过“多次探测”来解决哈希冲突。根据探测方法的不同,主要分为 线性探测、平方探测、多次哈希。 线性探测 「线性探测」使用固定步长的线性查找来解决哈希冲突。 工业界方案 Java 采用「链式地址」。在 JDK 1.8 之后,HashMap 内数组长度大于 64 时,长度大于 8 的链 表会被转化为「红黑树」,以提升查找性能。 Python 采用「开放寻址」。字典 dict 使用伪随机数进行探测。 6.3. 小结 ‧ 向哈希表中输入一个键 key ,查询到值 value 的时间复杂度为 ?(1) ,非常高效。 ‧ 哈希表的常用操作包括查询、添加与删除键值对、遍历键值对等。0 码力 | 187 页 | 14.71 MB | 1 年前3 Hello 算法 1.0.0b1 C++版扩容来减小冲突概率。极端情况下,当输入空间和输出空间 大小相等时,哈希表就等价于数组了,可谓“大力出奇迹”。 另一方面,考虑通过优化哈希表的表示方式以缓解哈希冲突,常见的方法有「链式地址」和「开放寻址」。 6. 散列表 hello‑algo.com 88 6.2.1. 哈希表扩容 「负载因子 Load Factor」定义为 哈希表中元素数量除以桶槽数量(即数组大小),代表哈希冲突的严重程度。 为了提升操作效率,可以把「链表」转化为「AVL 树」或「红黑树」,将查询操作的时间复杂度优化至 ?(log ?) 。 6. 散列表 hello‑algo.com 89 6.2.3. 开放寻址 「开放寻址」不引入额外数据结构,而是通过“多次探测”来解决哈希冲突。根据探测方法的不同,主要分为 线性探测、平方探测、多次哈希。 线性探测 「线性探测」使用固定步长的线性查找来解决哈希冲突。 工业界方案 Java 采用「链式地址」。在 JDK 1.8 之后,HashMap 内数组长度大于 64 时,长度大于 8 的链 表会被转化为「红黑树」,以提升查找性能。 Python 采用「开放寻址」。字典 dict 使用伪随机数进行探测。 6.3. 小结 ‧ 向哈希表中输入一个键 key ,查询到值 value 的时间复杂度为 ?(1) ,非常高效。 ‧ 哈希表的常用操作包括查询、添加与删除键值对、遍历键值对等。0 码力 | 187 页 | 14.71 MB | 1 年前3
 Hello 算法 1.0.0b2 C++版大小相等时,哈希表就等价于数组了,每个 key 都对应唯一的数组索引,可谓“大力出奇迹”。 另一方面,考虑通过优化哈希表的表示来缓解哈希冲突,常见的方法有「链式地址 Separate Chaining」和 「开放寻址 Open Addressing」。 6.2.1. 哈希表扩容 哈希函数的最后一步往往是对桶数量 ? 取余,以将哈希值映射到桶的索引范围,从而将 key 放入对应的桶中。 当哈希表容量越大(即 查询效率降低,因为需要线性遍历链表来查找对应元素; 为了提升操作效率,可以把「链表」转化为「AVL 树」或「红黑树」,将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.3. 开放寻址 「开放寻址」不引入额外数据结构,而是通过“多次探测”来解决哈希冲突。根据探测方法的不同,主要分为 线性探测、平方探测、多次哈希。 线性探测 「线性探测」使用固定步长的线性查找来解决哈希冲突。 工业界方案 Java 采用「链式地址」。在 JDK 1.8 之后,HashMap 内数组长度大于 64 时,长度大于 8 的链 表会被转化为「红黑树」,以提升查找性能。 Python 采用「开放寻址」。字典 dict 使用伪随机数进行探测。 Golang 采用「链式地址」。Go 规定每个桶最多存储 8 个键值对,超出容量则连接一个溢出桶; 当溢出桶过多时,会执行一次特殊的等量扩容操作,以保证性能。0 码力 | 197 页 | 15.72 MB | 1 年前3 Hello 算法 1.0.0b2 C++版大小相等时,哈希表就等价于数组了,每个 key 都对应唯一的数组索引,可谓“大力出奇迹”。 另一方面,考虑通过优化哈希表的表示来缓解哈希冲突,常见的方法有「链式地址 Separate Chaining」和 「开放寻址 Open Addressing」。 6.2.1. 哈希表扩容 哈希函数的最后一步往往是对桶数量 ? 取余,以将哈希值映射到桶的索引范围,从而将 key 放入对应的桶中。 当哈希表容量越大(即 查询效率降低,因为需要线性遍历链表来查找对应元素; 为了提升操作效率,可以把「链表」转化为「AVL 树」或「红黑树」,将查询操作的时间复杂度优化至 ?(log ?) 。 6.2.3. 开放寻址 「开放寻址」不引入额外数据结构,而是通过“多次探测”来解决哈希冲突。根据探测方法的不同,主要分为 线性探测、平方探测、多次哈希。 线性探测 「线性探测」使用固定步长的线性查找来解决哈希冲突。 工业界方案 Java 采用「链式地址」。在 JDK 1.8 之后,HashMap 内数组长度大于 64 时,长度大于 8 的链 表会被转化为「红黑树」,以提升查找性能。 Python 采用「开放寻址」。字典 dict 使用伪随机数进行探测。 Golang 采用「链式地址」。Go 规定每个桶最多存储 8 个键值对,超出容量则连接一个溢出桶; 当溢出桶过多时,会执行一次特殊的等量扩容操作,以保证性能。0 码力 | 197 页 | 15.72 MB | 1 年前3
 C++高性能并行编程与优化 -  课件 - 08 CUDA 开启的 GPU 编程一样,相对而言低效了。若一级缓存还装不下,那会打翻到所有 SM 共用的二级缓存。 • 此外,如果在线程局部分配一个数组,并通过动态下标访问(例如遍历 BVH 时用到的模 拟栈),那无论如何都是会打翻到一级缓存的,因为寄存器不能动态寻址。 • 对于 Fermi 架构来说,每个线程最多可以有 63 个寄存器(每个有 4 字节)。 https://developer.download.nvidia.cn/CUDA/training/register_spilling0 码力 | 142 页 | 13.52 MB | 1 年前3 C++高性能并行编程与优化 -  课件 - 08 CUDA 开启的 GPU 编程一样,相对而言低效了。若一级缓存还装不下,那会打翻到所有 SM 共用的二级缓存。 • 此外,如果在线程局部分配一个数组,并通过动态下标访问(例如遍历 BVH 时用到的模 拟栈),那无论如何都是会打翻到一级缓存的,因为寄存器不能动态寻址。 • 对于 Fermi 架构来说,每个线程最多可以有 63 个寄存器(每个有 4 字节)。 https://developer.download.nvidia.cn/CUDA/training/register_spilling0 码力 | 142 页 | 13.52 MB | 1 年前3
 Hello 算法 1.2.0 繁体中文 C++ 版雜湊函式 hash collision 哈希冲突 雜湊衝突 load factor 负载因子 負載因子 separate chaining 链式地址 鏈結位址 open addressing 开放寻址 開放定址 linear probing 线性探测 線性探查 lazy deletion 懒删除 懶刪除 binary tree 二叉树 二元樹 tree node 树节点 樹節點 left‑child0 码力 | 379 页 | 18.79 MB | 10 月前3 Hello 算法 1.2.0 繁体中文 C++ 版雜湊函式 hash collision 哈希冲突 雜湊衝突 load factor 负载因子 負載因子 separate chaining 链式地址 鏈結位址 open addressing 开放寻址 開放定址 linear probing 线性探测 線性探查 lazy deletion 懒删除 懶刪除 binary tree 二叉树 二元樹 tree node 树节点 樹節點 left‑child0 码力 | 379 页 | 18.79 MB | 10 月前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 没有异议、可以望文生义的中文名词,我才使用。 虽然许多名词已经耳熟能详,我想我还是有必要把它们界定一下: API - Application Programming Interface。系统开放出来,给程序员使用的接口,就是 API。一般人的观念中API 是指像C 函数那样的东西,不尽然!DOS 的中断向量 (interrupt vector)也可以说是一种API,OLE Interface(以C++0 码力 | 1009 页 | 11.08 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 没有异议、可以望文生义的中文名词,我才使用。 虽然许多名词已经耳熟能详,我想我还是有必要把它们界定一下: API - Application Programming Interface。系统开放出来,给程序员使用的接口,就是 API。一般人的观念中API 是指像C 函数那样的东西,不尽然!DOS 的中断向量 (interrupt vector)也可以说是一种API,OLE Interface(以C++0 码力 | 1009 页 | 11.08 MB | 1 年前3
共 11 条
- 1
- 2













