《深入浅出MFC》2/e8086, 8051 系列及Motorola 68000 系列的assembly 语言比较熟悉,而对framework 这样的软件 制造思想和手段一直并不熟悉。近来偶有机会加入一个project,要生成在Win95 下运行的 代码,因此,想尝试一下使用framework 构造软件。很幸运,我找到了您的书。讲VC++ MFC 的书很多,但能像您这样做到「深入浅出」的,实在很少。看您的书,是享受。我手里这本 088 * ㆕種不同的物件生存方式 / 090 * 所謂 "Unwinding" / 092 執行時期型別資訊(RTTI) / 092 動態生成(Dynamic Creation) / 095 異常處理(Exception Handling) / 096 Template / 100 16 IsKindOf(型別辨識) / 140 Frame4 範例程式 / 141 Dynamic Creation(動態生成) / 143 DECLARE_DYNCREATE / IMPLEMENT_DYNCREATE 巨集 / 144 Frame6 範例程式 / 1510 码力 | 1009 页 | 11.08 MB | 1 年前3
Hello 算法 1.0.0b1 C++版效果有限,可前往 hello‑algo.com 网页版获得更好的阅读体验。 致谢 本书在开源社区的群策群力下逐步成长,感谢每一位撰稿人,是他们的无私奉献让这本书变得更好,他 们是(按照 GitHub 自动生成的顺序):krahets, justin‑tse, sjinzh, Reanon, nuomi1, Gonglja, S‑N‑ O‑R‑L‑A‑X, danielsss, RiverTwilight 读时应该多加关注。 ‧ 实践是学习编程的最佳方式,强烈推荐运行源代码,动手敲代码。 ‧ 本书提供了讨论区,遇到疑惑可以随时提问。 8 1. 引言 1.1. 算法无处不在 听到“算法”这个词,我们一般会联想到数学。但实际上,大多数算法并不包含复杂的数学,而更像是在考察 基本逻辑,而这些逻辑在我们日常生活中处处可见。 在正式介绍算法之前,我想告诉你一件有趣的事:其实,你在过去已经学会了很多算法,并且已经习惯将它们 === File: worst_best_time_complexity.cpp === /* 生成一个数组,元素为 { 1, 2, ..., n },顺序被打乱 */ vectorrandomNumbers(int n) { vector nums(n); // 生成数组 nums = { 1, 2, 3, ..., n } 2. 复杂度分析 hello‑algo 0 码力 | 187 页 | 14.71 MB | 1 年前3
Hello 算法 1.0.0b2 C++版效果有限,可前往 hello‑algo.com 网页版获得更好的阅读体验。 致谢 本书在开源社区的群策群力下逐步成长,感谢每一位撰稿人,是他们的无私奉献让这本书变得更好,他 们是(按照 GitHub 自动生成的顺序):krahets, justin‑tse, sjinzh, Reanon, nuomi1, Gonglja, S‑N‑ O‑R‑L‑A‑X, danielsss, RiverTwilight 读时应该多加关注。 ‧ 实践是学习编程的最佳方式,强烈推荐运行源代码,动手敲代码。 ‧ 本书提供了讨论区,遇到疑惑可以随时提问。 8 1. 引言 1.1. 算法无处不在 听到“算法”这个词,我们一般会联想到数学。但实际上,大多数算法并不包含复杂的数学,而更像是在考察 基本逻辑,而这些逻辑在我们日常生活中处处可见。 在正式介绍算法之前,我想告诉你一件有趣的事:其实,你在过去已经学会了很多算法,并且已经习惯将它们 === File: worst_best_time_complexity.cpp === /* 生成一个数组,元素为 { 1, 2, ..., n },顺序被打乱 */ vectorrandomNumbers(int n) { vector nums(n); // 生成数组 nums = { 1, 2, 3, ..., n } 2. 复杂度分析 hello‑algo 0 码力 | 197 页 | 15.72 MB | 1 年前3
Hello 算法 1.0.0b4 C++版展示效果受限,可访问 hello‑algo.com 网页版以获得更优的阅读体验。 致谢 本书在开源社区众多贡献者的共同努力下不断成长。感谢每一位投入时间与精力的撰稿人,他们 是(按照 GitHub 自动生成的顺序):krahets, sjinzh, justin‑tse, Reanon, nuomi1, Gonglja, S‑N‑O‑ R‑L‑A‑X, danielsss, hpstory, RiverTwilight 实践乃学习编程之最佳途径。强烈建议运行源代码并亲自敲打代码。 ‧ 本书网页版的每个章节都设有讨论区,欢迎随时分享你的疑惑与见解。 7 1. 初识算法 1.1. 算法无处不在 当我们听到“算法”这个词时,很自然地会想到数学。然而实际上,许多算法并不涉及复杂数学,而是更多 地依赖于基本逻辑,这些逻辑在我们的日常生活中处处可见。 在正式探讨算法之前,有一个有趣的事实值得分享:你已经在不知不觉中学会了许多算法,并习惯将它们应 === File: worst_best_time_complexity.cpp === /* 生成一个数组,元素为 { 1, 2, ..., n },顺序被打乱 */ vectorrandomNumbers(int n) { vector nums(n); // 生成数组 nums = { 1, 2, 3, ..., n } for (int i = 0; i < 0 码力 | 343 页 | 27.39 MB | 1 年前3
Hello 算法 1.1.0 C++ 版hello‑algo.com 3 图 0‑1 本书主要内容 0.1.3 致谢 本书在开源社区众多贡献者的共同努力下不断完善。感谢每一位投入时间与精力的撰稿人,他们是(按照 GitHub 自动生成的顺序):krahets、Gonglja、nuomi1、codingonion、Reanon、justin‑tse、hpstory、 danielsss、curtishd、night‑cruise 一位少女翩翩起舞,与数据交织在一起,裙摆上飘扬着算法的旋律。 她邀请你共舞,请紧跟她的步伐,踏入充满逻辑与美感的算法世界。 第 1 章 初识算法 hello‑algo.com 11 1.1 算法无处不在 当我们听到“算法”这个词时,很自然地会想到数学。然而实际上,许多算法并不涉及复杂数学,而是更多 地依赖基本逻辑,这些逻辑在我们的日常生活中处处可见。 在正式探讨算法之前,有一个有趣的事实值得分享:你已经在不知不觉中学会了许多算法,并习惯将它们应 linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 hello‑algo.com 39 图 2‑130 码力 | 379 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0b5 C++版算法》,学起来应该会简单 10 倍!” ——李沐,亚马逊资深首席科学家 致谢 本书在开源社区众多贡献者的共同努力下不断成长。感谢每一位投入时间与精力的撰稿人,他们是 (按照 GitHub 自动生成的顺序):krahets, justin‑tse, sjinzh, nuomi1, Reanon, Gonglja, S‑N‑O‑R‑ L‑A‑X, hpstory, danielsss, RiverTwilight 一位少女翩翩起舞,与数据交织在一起,裙摆上飘扬着算法的旋律。 她邀请你共舞,请紧跟她的步伐,踏入充满逻辑与美感的算法世界。 第 1 章 初识算法 hello‑algo.com 10 1.1 算法无处不在 当我们听到“算法”这个词时,很自然地会想到数学。然而实际上,许多算法并不涉及复杂数学,而是更多 地依赖于基本逻辑,这些逻辑在我们的日常生活中处处可见。 在正式探讨算法之前,有一个有趣的事实值得分享:你已经在不知不觉中学会了许多算法,并习惯将它们应 linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 hello‑algo.com 37 图 2‑130 码力 | 377 页 | 30.69 MB | 1 年前3
Hello 算法 1.0.0 C++版hello‑algo.com 3 图 0‑1 本书主要内容 0.1.3 致谢 本书在开源社区众多贡献者的共同努力下不断完善。感谢每一位投入时间与精力的撰稿人,他们是(按照 GitHub 自动生成的顺序):krahets、codingonion、nuomi1、Gonglja、Reanon、justin‑tse、danielsss、 hpstory、S‑N‑O‑R‑L‑A‑X、night‑c 一位少女翩翩起舞,与数据交织在一起,裙摆上飘扬着算法的旋律。 她邀请你共舞,请紧跟她的步伐,踏入充满逻辑与美感的算法世界。 第 1 章 初识算法 hello‑algo.com 11 1.1 算法无处不在 当我们听到“算法”这个词时,很自然地会想到数学。然而实际上,许多算法并不涉及复杂数学,而是更多 地依赖基本逻辑,这些逻辑在我们的日常生活中处处可见。 在正式探讨算法之前,有一个有趣的事实值得分享:你已经在不知不觉中学会了许多算法,并习惯将它们应 linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 hello‑algo.com 39 图 2‑130 码力 | 378 页 | 17.59 MB | 1 年前3
Hello 算法 1.2.0 简体中文 C++ 版hello‑algo.com 3 图 0‑1 本书主要内容 0.1.3 致谢 本书在开源社区众多贡献者的共同努力下不断完善。感谢每一位投入时间与精力的撰稿人,他们是(按照 GitHub 自动生成的顺序):krahets、coderonion、Gonglja、nuomi1、Reanon、justin‑tse、hpstory、 danielsss、curtishd、night‑cruise、 扬着算法的旋律。 她邀请你共舞,请紧跟她的步伐,踏入充满逻辑与美感的算法世界。 第 1 章 初识算法 www.hello‑algo.com 11 1.1 算法无处不在 当我们听到“算法”这个词时,很自然地会想到数学。然而实际上,许多算法并不涉及复杂数学,而是更多 地依赖基本逻辑,这些逻辑在我们的日常生活中处处可见。 在正式探讨算法之前,有一个有趣的事实值得分享:你已经在不知不觉中学会了许多算法,并习惯将它们应 linearLogRecur(n / 2); for (int i = 0; i < n; i++) { count++; } return count; } 图 2‑13 展示了线性对数阶的生成方式。二叉树的每一层的操作总数都为 ? ,树共有 log2 ? + 1 层,因此时 间复杂度为 ?(? log ?) 。 第 2 章 复杂度分析 www.hello‑algo.com 39 图0 码力 | 379 页 | 18.48 MB | 10 月前3
C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南-j4 • sudo make install • cd .. • 需要先创建 build 目录 • 切换到 build 目录 • 在 build 目录运行 cmake < 源码目录 > 生成 Makefile • 执行本地的构建系统 make 真正开始构建( 4 进程并 行) • 让本地的构建系统执行安装步骤 • 回到源码目录 现代 CMake 提供了更方便的 -B 和 --build 上调用 devenv.exe ) • 结论:从现在开始,如果在命令行操作 cmake ,请使用更方便的 -B 和 --build 命令。 // 在源码目录用 -B 直接创建 build 目录并生成 build/Makefile // 自动调用本地的构建系统在 build 里构建,即: make -C build -j4 // 调用本地的构建系统执行 选项:指定配置变量(又称缓存变量) • 可见 CMake 项目的构建分为两步: • 第一步是 cmake -B build ,称为配置阶段( configure ),这时只检测环境并生成构建规则 • 会在 build 目录下生成本地构建系统能识别的项目文件( Makefile 或是 .sln ) • 第二步是 cmake --build build ,称为构建阶段( build ),这时才实际调用编译器来编译代码0 码力 | 166 页 | 6.54 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 04 从汇编角度看编译器优化4GB 限制外,也有一定性能优势。 8 位, 16 位, 32 位, 64 位版本 al, ax, eax, rax r15b, r15w, r15d, r15 AT&T 汇编语言 GCC 编译器所生成的汇编语言就属于这种 返回值:通过 eax 传出 movl $42, %eax 相当于: eax = 42; 前 6 个参数:分别通过 edi , esi , edx , ecx , r8d , rsi 并不是指针 整数加常数乘整数:都可以被优化成 leal 因为这种线性变换在地址索引 中很常见,所以被 x86 做成 了单独一个指令。这里尽管不 是地址,但同样可以利用 lea 指令简化生成的代码大小。 eax = rdi + rsi * 8 指针访问对象:线性访问地址 rsi = (int64_t)esi eax = *(int *)(rdi + rsi * 4) 为什么乘以 :一个 float 加法。 • addsd :一个 double 加法。 • addps :四个 float 加法。 • addpd :两个 double 加法。 省流助手: 如果你看到编译器生成的汇编里,有大量 ss 结尾 的指令则说明矢量化失败;如果看到大多数都是 ps 结尾则说明矢量化成功。 xmm0 xmm1 xmm0 addss %xmm1, %xmm0 addps %xmm10 码力 | 108 页 | 9.47 MB | 1 年前3
共 24 条
- 1
- 2
- 3













