![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++就业体系课资料
文章平均质量分 90
C++就业体系课资料
程序员zhi路
Java开发工程师
展开
-
罗剑锋的C++实战笔记16-五花八门的算法:不要再手写for循环了
上节课我提到了计算机界的经典公式“算法 + 数据结构 = 程序”,公式里的“数据结构”就是 C++ 里的容器,容器我们已经学过了,今天就来学习下公式里的“算法”。虽然算法是 STL(标准库前身)的三大要件之一(容器、算法、迭代器),也是 C++ 标准库里一个非常重要的部分,但它却没有像容器那样被大众广泛接受。从我观察到的情况来看,很多人都会在代码里普遍应用 vector、set、map,但几乎从来不用任何算法,聊起算法这个话题,也是“一问三不知”,这的确是一个比较奇怪的现象。原创 2024-07-02 09:12:29 · 764 阅读 · 0 评论 -
现代C++31-Concepts:如何对模板进行约束
从这一讲开始,我们进入了未来篇,展望一下即将在 C++20 出现的新功能。我们第一个要讨论的,是 concepts(概念)——一个难产了很多年才终于进入 C++ 的新功能。原创 2024-06-26 18:08:43 · 787 阅读 · 0 评论 -
现代C++ 30-人生漫长,走点弯路在所难免
但是,因为我也不是无聊地重复编写同样的程序,而是根据自己的兴趣爱好钻研自己不理解、感兴趣的方面,这种“泛读”也应该部分起到了塑造我的思维的作用。你应当做的事情,是退一步,看看如何可以用更好的抽象来解决问题,而不是一遍遍地去重复——否则,就真成了码农,潜在可以被其他人,甚至机器,在某一天替代了。有还在使用 void main 的(应该是 int main),有对结构的对齐规则理解不正确的(部分是因为 MSVC 和 GCC 规则有些细微的小区别),还有对 C++ 对象的生命周期规则理解有偏差的,等等。原创 2024-06-24 12:01:39 · 443 阅读 · 0 评论 -
现代C++29- C++好书荐读
中文版:王刚译,《C++ 语言导学》(第二版)。机械工业出版社,2019推荐指数:★★★★★(也有第一版的影印版,那就不推荐了。这是唯一一本较为浅显的全面介绍现代 C++ 的入门书。书虽然较薄,但 C++ 之父的功力在那里(这不是废话么😂),时有精妙之论。书的覆盖面很广,介绍了 C++ 的基本功能和惯用法。这本书的讲授方式,也体现了他的透过高层抽象来教授 C++ 的理念。Michael Wong 和 IBM XL 编译器中国开发团队,《深入理解 C++11:C++11 新特性解析与应用》。原创 2024-06-24 12:00:05 · 713 阅读 · 0 评论 -
现代C++28-C++RESTSDK:使用现代C++开发网络应用
有了初步印象之后,现在我们可以回过头看看 C++ REST SDK 到底是什么了。它是一套用来开发 HTTP 客户端和服务器的现代异步 C++ 代码库,支持以下特性(随平台不同会有所区别):HTTP 客户端HTTP 服务器任务JSONURI异步流WebSocket 客户端OAuth 客户端上面的例子里用到了 HTTP 客户端、任务和 URI(实际上是由 string_t 隐式构造了 uri),我们下面再介绍一下异步流、JSON 和 HTTP 服务器。原创 2024-06-24 11:58:17 · 630 阅读 · 0 评论 -
现代C++27- Easylogging++和spdlog:两个好用的日志库
Easylogging++ 一共只有两个文件,一个是头文件,一个是普通 C++ 源文件。事实上,它的一个较早版本只有一个文件。正如 Catch2 里一旦定义了 CATCH_CONFIG_MAIN 编译速度会大大减慢一样,把什么东西都放一起最终证明对编译速度还是相当不利的,因此,有人提交了一个补丁,把代码拆成了两个文件。使用 Easylogging++ 也只需要这两个文件——除此之外,就只有对标准和系统头文件的依赖了。要使用 Easylogging++,推荐直接把这两个文件放到你的项目里。原创 2024-06-24 11:55:07 · 642 阅读 · 0 评论 -
现代C++26-两个单元测试库:C++里如何进行单元测试
单元测试已经越来越成为程序员工作密不可分的一部分了。在 C++ 里,我们当然也是可以很方便地进行单元测试的。今天,我就来介绍两个单元测试库:一个是 Boost.Test [1],一个是 Catch2 [2]。原创 2024-06-24 11:50:34 · 910 阅读 · 0 评论 -
现代C++26- Boost:你需要的“瑞士军刀”
我们已经零零碎碎提到过几次 Boost 了。作为 C++ 世界里标准库之外最知名的开放源码程序库,我们值得专门用一讲来讨论一下 Boost。原创 2024-06-24 10:54:03 · 655 阅读 · 0 评论 -
现代C++25-数字计算:介绍线性代数和数值计算库
科学计算在今天已经完全可以使用 C++ 了。我不是从事科学计算这一领域的工作的,不过,在工作中也多多少少接触到了一些计算相关的库。今天,我就给你介绍几个有用的计算库。原创 2024-06-24 10:49:56 · 1101 阅读 · 0 评论 -
现代C++24- 处理数据类型变化和错误:optional、variant、expected和Herbception
我们之前已经讨论了异常是推荐的 C++ 错误处理方式。不过,C++ 里有另外一些结构也很适合进行错误处理,今天我们就来讨论一下。原创 2024-06-24 10:45:30 · 534 阅读 · 0 评论 -
现代C++23-工具漫谈:编译、格式化、代码检查、排错各显身手
现代 C++ 语言,我们讲到这里就告一段落了。今天我们正式开启了实战篇,先讲一个轻松些的话题——工具。原创 2024-06-24 10:40:24 · 1003 阅读 · 0 评论 -
现代C++22-内存模型和atomic:理解并发的复杂性
上一讲我们讨论了一些并发编程的基本概念,今天我们来讨论一个略有点绕的问题,C++ 里的内存模型和原子量。原创 2024-06-24 10:37:12 · 727 阅读 · 0 评论 -
现代C++21-thread和future:领略异步中的未来
编译期的烧脑我们先告个段落,今天我们开始讲一个全新的话题——并发(concurrency)。原创 2024-06-24 10:31:44 · 780 阅读 · 0 评论 -
现代C++20-应用可变模板和tuple的编译期技巧
今天我们讲一个特殊的专题,如何使用可变模板和 tuple 来完成一些常见的功能,尤其是编译期计算。原创 2024-06-24 10:28:14 · 602 阅读 · 0 评论 -
现代C++19-函数式编程:一种越来越流行的编程范式
上一讲我们初步介绍了函数对象和 lambda 表达式,今天我们来讲讲它们的主要用途——函数式编程。原创 2024-06-24 10:22:37 · 889 阅读 · 0 评论 -
现代C++18-函数对象和lambda:进入函数式编程
本讲我们将介绍函数对象,尤其是匿名函数对象——lambda 表达式。今天的内容说难不难,但可能跟你的日常思维方式有较大的区别,建议你一定要试验一下文中的代码(使用 xeus-cling 的同学要注意:xeus-cling 似乎不太喜欢有 lambda 的代码😓;遇到有问题时,还是只能回到普通的编译执行方式了)。原创 2024-06-24 10:16:36 · 1079 阅读 · 0 评论 -
现代C++17-constexpr:一个常态的世界
我们已经连续讲了几讲比较累人的编译期编程了。今天我们还是继续这个话题,但是,相信今天学完之后,你会感觉比之前几讲要轻松很多。C++ 语言里的很多改进,让我们做编译期编程也变得越来越简单了。原创 2024-06-24 10:11:54 · 592 阅读 · 0 评论 -
现代C++16-SFINAE:不是错误的替换失败是怎么回事
我们已经连续讲了两讲模板和编译期编程了。今天我们还是继续这个话题,讲的内容是模板里的一个特殊概念——替换失败非错(substituion failure is not an error),英文简称为 SFINAE。原创 2024-06-23 21:54:59 · 654 阅读 · 0 评论 -
现代C++15-编译期能做些什么?一个完整的计算世界
上一讲我们简单介绍了模板的基本用法及其在泛型编程中的应用。这一讲我们来看一下模板的另外一种重要用途——编译期计算,也称作“模板元编程”。原创 2024-06-23 21:51:53 · 609 阅读 · 0 评论 -
现代C++14-编译期多态:泛型编程和模板入门
while (b!b = r;return a;这里只有一个小小的问题,C++ 的整数类型可不止 int 一种啊。为了让这个算法对像长整型这样的类型也生效,我们需要把它定义成一个模板:while (b!b = r;return a;这个代码里,基本上就是把 int 替换成了模板参数 E,并在函数的开头添加了模板的声明。我们对于“整数”这只鸭子的要求实际上是:可以通过常量 0 来构造可以拷贝(构造和赋值)可以作不等于的比较。原创 2024-06-23 21:48:40 · 851 阅读 · 0 评论 -
现代C++13-Unicode:进入多文字支持的世界
Unicode 在今天已经大大超出了最初的目标。到 Unicode 12.1 为止,Unicode 已经包含了 137,994 个字符,囊括所有主要语言(使用中的和已经不再使用的),并包含了表情符号、数学符号等各种特殊字符。仍然要指出一下,Unicode 字符是根据含义来区分的,而非根据字形。除了前面提到过中日韩汉字没有分开,像斜体(italics)、小大写字母(small caps)等排版效果在 Unicode 里也没有独立的对应。原创 2024-06-23 21:45:12 · 687 阅读 · 0 评论 -
现代C++12-到底应不应该返回对象?
前几讲里我们已经约略地提到了返回对象的问题,本讲里我们进一步展开这个话题,把返回对象这个问题讲深讲透。原创 2024-06-23 21:36:49 · 688 阅读 · 0 评论 -
现代C++11-易用性改进II:字面量、静态断言和成员函数说明符
字面量(literal)是指在源代码中写出的固定常量,它们在 C++98 里只能是原生类型,如:"hello",字符串字面量,类型是 const char[6]1,整数字面量,类型是 int0.0,浮点数字面量,类型是 double3.14f,浮点数字面量,类型是 float123456789ul,无符号长整数字面量,类型是 unsigned longC++11 引入了自定义字面量,可以使用 operator"" 后缀 来将用户提供的字面量转换成实际的类型。原创 2024-06-23 21:33:56 · 573 阅读 · 0 评论 -
现代C++10-易用性改进I:自动类型推断和初始化
在之前的几讲里,我们已经多多少少接触到了一些 C++11 以来增加的新特性。下面的两讲,我会重点讲一下现代 C++(C++11/14/17)带来的易用性改进。就像我们中说的,我们主要是介绍 C++ 里好用的特性,而非让你死记规则。因此,这里讲到的内容,有时是一种简化的说法。对于日常使用,本讲介绍的应该能满足大部分的需求。对于复杂用法和边角情况,你可能还是需要查阅参考资料里的明细规则。原创 2024-06-23 21:30:18 · 617 阅读 · 0 评论 -
现代C++9-迭代器和好用的新for循环
迭代器是一个很通用的概念,并不是一个特定的类型。它实际上是一组对类型的要求([1])。它的最基本要求就是从一个端点出发,下一步、下一步地到达另一个端点。按照一般的中文习惯,也许“遍历”是比“迭代”更好的用词。我们可以遍历一个字符串的字符,遍历一个文件的内容,遍历目录里的所有文件,等等。这些都可以用迭代器来表达。我在用 output_container.h 输出容器内容的时候,实际上就对容器的 begin 和 end 成员函数返回的对象类型提出了要求。原创 2024-06-23 21:20:14 · 847 阅读 · 0 评论 -
现代C++8-异常:用还是不用,这是个问题
到现在为止,我们已经有好多次都提到异常了。今天,我们就来彻底地聊一聊异常。首先,开宗明义,如果你不知道到底该不该用异常的话,那答案就是该用。如果你需要避免使用异常,原因必须是你有明确的需要避免使用异常的理由。下面我们就开始说说异常。原创 2024-06-23 21:16:45 · 632 阅读 · 0 评论 -
现代C++7-容器汇编II:需要函数对象的容器
上一讲我们学习了 C++ 的序列容器和两个容器适配器,今天我们继续讲完剩下的标准容器([1])。原创 2024-06-23 21:14:34 · 675 阅读 · 0 评论 -
现代C++6-容器汇编I:比较简单的若干容器
上几讲我们学习了 C++ 的资源管理和值类别。今天我们换一个话题,来看一下 C++ 里的容器。关于容器,已经存在不少的学习资料了。在 cppreference 上有很完备的参考资料([1])。今天我们采取一种非正规的讲解方式,尽量不重复已有的参考资料,而是让你加深对于重要容器的理解。对于容器,学习上的一个麻烦点是你无法直接输出容器的内容——如果你定义了一个 vector<int> v,你是没法简单输出 v 的内容的。原创 2024-06-23 21:11:20 · 590 阅读 · 0 评论 -
现代C++5-右值和移动究竟解决了什么问题?
从上一讲智能指针开始,我们已经或多或少接触了移动语义。本讲我们就完整地讨论一下移动语义和相关的概念。移动语义是 C++11 里引入的一个重要概念;理解这个概念,是理解很多现代 C++ 里的优化的基础。原创 2024-06-23 12:44:12 · 837 阅读 · 0 评论 -
现代C++4-自己动手,实现C++的智能指针
上一讲,我们描述了一个某种程度上可以当成智能指针用的类 shape_wrapper。使用那个智能指针,可以简化资源的管理,从根本上消除资源(包括内存)泄漏的可能性。这一讲我们就来进一步讲解,如何将 shape_wrapper 改造成一个完整的智能指针。你会看到,智能指针本质上并不神秘,其实就是 RAII 资源管理功能的自然展现而已。在学完这一讲之后,你应该会对 C++ 的 unique_ptr 和 shared_ptr 的功能非常熟悉了。同时,如果你今后要创建类似的资源管理类,也不会是一件难事。原创 2024-06-23 12:39:54 · 675 阅读 · 0 评论 -
现代C++3-堆、栈、RAII:C++里该如何管理资源?
今天我们就正式开启了 C++ 的学习之旅,作为第一讲,我想先带你把地基打牢。我们来学习一下内存管理的基本概念,大致的学习路径是:先讲堆和栈,然后讨论 C++ 的特色功能 RAII。掌握这些概念,是能够熟练运用 C++ 的基础。原创 2024-06-23 12:35:08 · 723 阅读 · 0 评论 -
现代C++2-有关术语发音及环境要求
这一讲是课前必读,主要说明术语发音和环境要求的问题,希望能帮助你更好地学习和实践本专栏的内容。原创 2024-06-22 20:20:02 · 474 阅读 · 0 评论 -
现代C++1-C++这么难,为什么我们还要用C++?
C++ 可算是一种声名在外的编程语言了。这个名声有好有坏,从好的方面讲,C++ 性能非常好,哪个编程语言性能好的话,总忍不住要跟 C++ 来单挑一下;从坏的方面讲,它是臭名昭著的复杂、难学、难用。当然,这样一来,熟练的 C++ 程序员也就自然而然获得了“水平很高”的名声,所以这也不完全是件坏事。不管说 C++ 是好还是坏,不可否认的是,C++ 仍然是一门非常流行且非常具有活力的语言。原创 2024-06-22 20:18:47 · 879 阅读 · 0 评论 -
罗剑锋的C++实战笔记27-4本值得一读再读的经典好书
著名的文学家高尔基说过一句名言:“书籍是人类进步的阶梯。利用碎片时间学习固然很重要,但静下心来认真地读书却更加重要,它能够让你去主动思考、主动探索,更系统、更完整、更深入地获取知识。为了能够让你在工作之余充充电,提高一下自己,今天我就暂且岔开话题,不讲 C++ 语言,而是开列一个清单,精选出几本我认为值得一读再读的技术类好书。顺便说一句,“读书”最好是看纸质实体书,而不是电子版。原创 2024-06-22 20:07:22 · 448 阅读 · 0 评论 -
罗剑锋的C++实战笔记26-给你分享我的工作百宝箱
今天,我再来说点 C++ 之外的话题。我来聊聊我的工作方式,给你介绍一下我用的开发环境,有快捷键、配置脚本、常用命令什么的。算不上什么“高效技巧”,但是也能从小处提高工作效率,希望能给你一点借鉴。原创 2024-06-22 20:03:00 · 530 阅读 · 0 评论 -
罗剑锋的C++实战笔记25-路远,未有穷期
两个月的时间过得好快啊,一眨眼的功夫,就到了和你说“再见”的时候了。同时,我也要祝贺你,祝贺你凭着力量、智慧和勇气(《The Legend of Zelda》的黄金三角),突破了 C++ 的“重重迷雾”,成功地掌握了 C++ 的核心知识和应用技能,相信这将会是你今后工作履历中的一笔“浓墨重彩”。现在再回头看各节课程,我觉得基本上算是达成了当初预计的目标:贴近实际的开发经验分享,没有剑走偏锋的“葵花宝典”,而是踏踏实实的“太祖长拳”。但是我觉得这门课程的交付还是有一点点遗憾的。原创 2024-06-22 20:00:35 · 330 阅读 · 0 评论 -
罗剑锋的C++实战笔记24-知识串讲(下):带你开发一个书店应用
首先,我们来看一下怎么表示书本的销售记录。这里用的是 SalesData 类,它是书店程序数据统计的基础。如果是实际的项目,SalesData 会很复杂,因为一本书的相关信息有很多。但是,我们的这个例子只是演示,所以就简化了一些,基本的成员只有三个:ID 号、销售册数和销售金额。上节课,在讲自旋锁、配置文件等类时,我只是重点说了说代码内部逻辑,没有完整地细说,到底该怎么应用前面讲过的那些 C++ 编码准则。那么,这次在定义 SalesData 类的时候,我就集中归纳一下。原创 2024-06-22 19:58:21 · 809 阅读 · 0 评论 -
罗剑锋的C++实战笔记23-知识串讲(上):带你开发一个书店应用
到今天为止,课程里的 C++ 知识就全部讲完了。前面我们总共学习了四大模块,我再带你做一个简略的回顾。在“概论”单元,我带你从宏观的层面上重新认识了 C++,讲了它的四个生命周期和五个编程范式,分别介绍了在编码阶段、预处理阶段、编译阶段,C++ 能够做哪些事情,接着又重点说了在 C++ 里,运用哪些特性才能更好地实践面向对象编程。在“语言特性”单元,我们一起研究了自动类型推导、常量、智能指针、异常、函数式编程这五个特性。原创 2024-06-22 13:18:42 · 694 阅读 · 0 评论 -
罗剑锋的C++实战笔记22-设计模式(下):C++是怎么应用设计模式的?
上节课,我谈了设计模式和设计原则。今天,我就具体说说,在 C++ 里,该怎么应用单件、工厂、适配器、代理、职责链等这些经典的设计模式,用到的有 call_once()、make_unique()、async() 等 C++ 工具,希望能够给你一些在实际编码时的启发。(在接下来学的时候,你也可以同时思考一下它们都符合哪些设计原则,把设计模式和设计原则结合起来学习。原创 2024-06-22 13:14:38 · 796 阅读 · 0 评论 -
罗剑锋的C++实战笔记21-设计模式(上):C++与设计模式有啥关系?
今天,我们进入最后的“总结”单元,把前面学到的这些知识上升到“理论结合实践”的高度,做个归纳整理。我们先来了解一下设计模式和设计原则,然后再把理论“落地”,综合利用所有知识点,设计并开发出一个实际的服务器应用。你可能会问了:我们这是个 C++ 的课程,为什么还要专门来讲设计模式呢?我觉得,设计模式是一门通用的技术,是指导软件开发的“金科玉律”,它不仅渗透进了 C++ 语言和库的设计(当然也包括其他编程语言),而且也是成为高效 C++ 程序员必不可缺的“心法”和“武器”。原创 2024-06-22 13:12:02 · 658 阅读 · 0 评论