- 博客(97)
- 资源 (2)
- 收藏
- 关注

原创 C++学习:六个月从基础到就业(导航目录)
这是我的C++学习之旅的开始。我将定期更新这个博客系列,分享我的学习进度和心得。如果你也在学习C++,欢迎一起交流讨论。在接下来的博客中,我将从C++基础语法回顾开始,逐步深入到更高级的主题!本博客系列将持续更新,每完成一个主题,我会在上面的目录中添加相应的链接。如果你有任何建议或问题,欢迎在评论区留言!
2025-03-22 19:51:02
1406
3
原创 C++学习:六个月从基础到就业——多线程编程:Futures与异步任务
C++11的futures库为异步编程提供了更高层次的抽象,简化了多线程代码,减少了常见的同步错误。和如何协作传递异步结果std::async如何简化异步任务的创建和结果获取如何包装可调用对象,便于在线程间传递如何支持多个线程等待同一结果如何在异步任务中处理异常和超时实际应用中的最佳实践和常见陷阱C++20通过和停止标记进一步改进了异步编程模型,为任务取消和线程生命周期管理提供了更好的支持。掌握这些异步编程工具对构建高性能、可靠的多线程应用至关重要。
2025-05-21 13:47:03
595
原创 C++学习:六个月从基础到就业——多线程编程:条件变量
条件变量是C++11中实现线程同步和通信的强大工具。总是与互斥量配合使用,保护共享状态使用谓词函数处理虚假唤醒先修改状态,再发送通知,避免丢失唤醒根据实际需求选择还是条件变量适用于生产者-消费者模式、线程池、屏障同步等多种并发场景。随着C++20引入信号量和锁存器,我们现在有了更丰富的同步工具选择。在下一篇文章中,我们将探讨和,它们为C++并发编程提供了基于任务的异步模型。这是我C++学习之旅系列的第五十六篇技术文章。查看完整系列目录了解更多内容。
2025-05-21 13:46:21
311
原创 C++学习:六个月从基础到就业——多线程编程:互斥量与锁
互斥量和锁是C++多线程同步的基础。合理使用std::mutex等工具,可以有效避免数据竞争和死锁问题。C++17/20引入的等进一步提升了并发性能和代码简洁性。在下一篇文章中,我们将继续学习条件变量(),它是实现线程间通信和同步的关键工具。这是我C++学习之旅系列的第五十五篇技术文章。查看完整系列目录了解更多内容。
2025-05-20 21:17:28
854
原创 C++学习:六个月从基础到就业——多线程编程:std::thread基础
在这篇文章中,我们介绍了C++11的类及其基本用法,包括线程的创建、参数传递、生命周期管理以及常见问题。多线程编程是现代C++开发中不可或缺的一部分,掌握这些基础知识将为你构建高性能、响应迅速的应用程序奠定基础。线程创建与基本操作:使用创建线程,传递函数、函数对象或lambda表达式作为线程函数。参数传递:使用值传递、std::ref引用传递或移动语义传递参数到线程函数。线程管理:使用join()等待线程完成或detach()允许线程在后台运行。线程本地存储:使用关键字创建线程私有的变量。异常处理。
2025-05-20 16:54:05
1645
原创 解决即使安装了pageoffice网页还是无法跳转、点击按钮没有反应等问题
鉴于安全性的考虑,新版浏览器不支持pageoffice插件,因为其会在URL前加上"pageoffice://",不管是edge、360、谷歌都是如此(博主亲自测试)安装了pageoffice网页还是无法跳转、点击按钮没有反应。使用旧版浏览器即可解决此问题,
2025-05-19 18:26:39
180
原创 C++学习:六个月从基础到就业——C++20:模块(Modules)与其他特性
/ 在std命名空间特化formatter模板template<>// 解析格式说明符if (it!// 格式化值// 更复杂的格式化控制template<>if (it!return it;return 0;C++20的模块系统与其他新特性标志着C++语言的重大演进。模块系统彻底改变了代码组织方式,解决了长期困扰C++开发者的头文件问题。
2025-05-19 08:58:38
1203
原创 C++学习:六个月从基础到就业——C++20:范围(Ranges)进阶
视图类:实现范围接口的具体视图视图适配器:创建视图的函数对象适配器工厂:提供用户友好的接口// 步进视图 - 每隔n个元素取一个private:public:// 迭代器类实现// ... 迭代器实现细节 ...// 包含current_、end_指针和stride_步长// 实现operator++, operator*, operator==等// 适配器函数对象// 支持管道语法 range | views::stride(n)
2025-05-19 08:57:44
1389
原创 C++学习:六个月从基础到就业——C++20:范围(Ranges)基础
迭代器对耦合:必须同时提供起始和结束迭代器// 必须提供两个迭代器错误风险:容易传递不匹配的迭代器对// 潜在风险:传递了不匹配的迭代器对// 未定义行为组合算法困难:算法间组合需要中间容器,代码冗长// 筛选});// 转换});返回值不便:许多算法返回迭代器,需要检查合法性if (it!= v.end()) { // 必须检查是否有效// 使用*it} else {// 未找到在C++20中,范围(Range)是一个抽象概念,表示元素序列。
2025-05-18 17:06:04
957
1
原创 C++学习:六个月从基础到就业——C++20:协程(Coroutines)
协程(Coroutine)是一种特殊的函数,能够在执行过程中暂停并保存当前状态,稍后再从暂停的位置继续执行。这种能力使协程成为处理异步操作的强大工具。可暂停执行:协程可以在指定点暂停执行,并让出控制权状态保存:暂停时,协程的执行状态(包括局部变量和执行位置)被保存可恢复执行:协程可以从上次暂停的位置恢复执行多入口多出口:与传统函数的"单入口单出口"不同,协程可以有多个出口(暂停点)和入口(恢复点)协程 generate_sequence() {yield 1;// 产生值1并暂停。
2025-05-18 11:27:15
770
1
原创 C++学习:六个月从基础到就业——C++20:概念(Concepts)
在C++20中,概念是编译时谓词,用于约束模板参数。template<参数列表>concept 概念名称 = 约束表达式;// 简单概念:检查类型是否是整数// 复合概念:检查类型是否是数值类型// 使用requires表达式的概念:检查类型是否可打印// 要求T可以被输出到流// 参数化概念:检查两个类型是否可进行某种操作{ t + u };// 要求T和U可以相加C++20引入的概念(Concepts)是现代C++最重要的特性之一,它彻底改变了我们编写和使用模板的方式。
2025-05-18 11:15:16
897
原创 C++学习:六个月从基础到就业——C++17:string_view与filesystem
C++17引入的库是基于Boost.Filesystem库的标准化版本,它提供了一套跨平台的文件系统操作接口。在C++17之前,C++标准库并没有提供直接操作文件系统的功能,开发者不得不依赖平台特定的API或第三方库。库定义在头文件中,包含在命名空间内。路径表示和操作:提供了类来表示和操作文件路径文件状态查询:检查文件是否存在、类型、大小等目录遍历:迭代目录内容文件操作:创建、删除、重命名文件等权限管理:查询和修改文件权限符号链接处理:创建和解析符号链接空间查询:检查磁盘空间信息。
2025-05-18 11:08:18
879
原创 C++学习:六个月从基础到就业——C++17:std::optional/variant/any
C++17引入了三个非常有用的工具类型:、和。这些类型为C++程序员提供了更安全、更灵活的数据处理方式,弥补了C++标准库中的一些长期存在的缺陷。这些工具可以帮助我们编写更加健壮和表达力更强的代码,避免许多常见的编程陷阱。提供了一种表示"可能存在或不存在的值"的方法,是处理可选数据的优雅解决方案。实现了类型安全的联合体,可以安全地存储多种可能类型中的一种。则提供了一种完全动态的类型擦除容器,可以存储任意类型的单个值。本文将深入探讨这三种类型的设计理念、用法、性能特性以及实际应用场景,帮助你充分利用这些强大工
2025-05-18 11:07:29
952
原创 C++学习:六个月从基础到就业——C++17:if/switch初始化语句
C++17引入的if和switch语句初始化表达式是一项看似简单但非常实用的语法改进。它解决了变量作用域控制的痛点,使代码更简洁、更安全,并与其他C++17特性(如结构化绑定)协同工作得非常好。精确控制变量作用域,减少变量泄漏和相关错误简化临时变量的管理,使代码更加清晰减少嵌套层次,使代码结构更加扁平与其他C++17特性无缝集成,增强语言的表达能力这个特性适用于许多实际场景,包括资源管理、错误处理、查找操作和临时变量控制等。在现代C++编程中,它已成为提高代码质量的重要工具。
2025-05-18 11:06:24
615
原创 C++学习:六个月从基础到就业——C++17:结构化绑定
设计为聚合类型(具有公有数据成员的类)提供和特化以及get<N>函数提供自定义的get<N>函数和相应的类型特性// 自定义复数类,私有成员private:public:// 友元get函数,用于结构化绑定// 为Complex类提供tuple_size特化template<>// 为Complex类提供tuple_element特化template<>template<>// 使用结构化绑定。
2025-05-18 11:04:56
871
原创 C++学习:六个月从基础到就业——C++11/14:其他语言特性
要使自定义类型支持范围for循环,需要提供begin()和end()private:int start;int end;// 实现迭代器接口...public:// 使用// 输出: 1 2 3 4 5// 距离字面量// 转换为米// 使用// 创建Distance对象// 字符串字面量// std::string,不是C风格字符串// 时间字面量// 复数字面量// 复数(3, 4)nullptr:提供类型安全的空指针字面量constexpr。
2025-05-18 10:59:40
1044
原创 C++学习:六个月从基础到就业——C++11/14:列表初始化
聚合初始化:用于满足聚合条件的类或结构体initializer_list构造函数:用于接受任意数量的同类型值// 简单的JSON值类public:private:Type type;public:// 构造函数// 数组构造函数// 对象构造函数// 访问方法// 转换为字符串break;break;break;break;oss << "[";break;oss << "{";
2025-05-17 21:15:20
1585
13
原创 C++学习:六个月从基础到就业——C++11/14:decltype关键字
decltype关键字是C++11中引入的强大类型推导工具,它允许我们在不实际计算表达式的情况下获取表达式的精确类型。与auto不同,decltype能够保留引用、const和volatile限定符,使其特别适合用于泛型编程和模板元编程。C++14引入的则进一步简化了类型推导,特别是在需要完美转发和保留表达式精确类型的场景下,极大地提高了代码的灵活性和表达力。要有效使用decltype和,需要理解它们的类型推导规则,特别是对标识符、括号表达式和左值表达式的处理。同时,应当避免在过于复杂的表达式上使用。
2025-05-17 21:13:57
1435
14
原创 C++学习:六个月从基础到就业——C++11/14:auto类型推导
auto关键字是现代C++中简化代码、提高可读性和维护性的重要工具。它通过自动类型推导,消除了手动编写复杂类型的需要,适合用于迭代器声明、lambda表达式存储、复杂类型处理等场景。C++14进一步扩展了auto的应用范围,使其可用于函数返回类型推导和lambda参数,让C++代码更加灵活和表达力强。要有效使用auto,需要理解其类型推导规则,包括如何处理引用、const修饰符、数组和函数衰减等特性。同时,应当在代码清晰性和简洁性之间找到平衡,避免过度使用导致代码难以理解。
2025-05-17 21:09:26
808
原创 C++学习:六个月从基础到就业——C++11/14:lambda表达式
/ 简单的整数序列生成器// 斐波那契序列生成器a = b;// 使用整数生成器// 生成1, 3, 5, 7, ...i < 5;++i) {// 使用斐波那契生成器// 生成0, 1, 1, 2, 3, 5, ...i < 10;++i) {// 生成器与STL算法结合// 生成0, 5, 10, 15, ...return 0;
2025-05-17 21:06:56
987
原创 C++学习:六个月从基础到就业——C++11/14:lambda表达式
/ 简单的整数序列生成器// 斐波那契序列生成器a = b;// 使用整数生成器// 生成1, 3, 5, 7, ...i < 5;++i) {// 使用斐波那契生成器// 生成0, 1, 1, 2, 3, 5, ...i < 10;++i) {// 生成器与STL算法结合// 生成0, 5, 10, 15, ...return 0;
2025-05-04 22:46:02
1139
1
原创 C++学习:六个月从基础到就业——C++11/14:右值引用与移动语义
右值引用和移动语义是现代C++中最重要的优化技术之一,它们通过减少不必要的对象复制,大幅提高了程序的性能,特别是在处理大型数据结构时。提高性能:通过"窃取"资源而不是复制,减少内存分配和数据复制更高效的标准库:标准容器和算法通过移动语义获得显著性能提升表达能力增强:能够明确区分对象的"移动"和"复制"语义为管理资源的类实现移动操作理解并正确使用std::move和遵循移动语义的最佳实践使用智能指针和标准库容器自动受益于移动语义。
2025-05-04 22:45:13
1158
原创 我的创作纪念日
说来惭愧,我自身比较随性,最初写博客纯粹是为了逼自己一把,让自己坚持学习一下当时大火的python,当然现在也很火热。随着学习的深入,特别是接触到C++这门既强大又复杂的语言后,我意识到仅仅为自己记录是远远不够的。这个决定改变了我的创作方向:从简单的学习笔记,转变为系统化、结构化的技术教程。那天,作为一名大学生,我在学习编程的路上迈出了一小步,却也是最关键的第一步。回望这段旅程,我深感技术写作给我带来的改变——它不仅锻炼了我的表达能力,更让我的技术理解达到了新的高度。正如那句古话所说:“教是最好的学”。
2025-04-30 11:30:34
211
1
原创 C++学习:六个月从基础到就业——异常处理:机制与最佳实践
在实际项目中,标准异常可能无法满足所有需求,我们经常需要创建自定义异常类。一个好的做法是从// 自定义异常基类public:// 特定类型的异常private:public:private:public:// 使用异常try {try {// 例如,在特定错误码的情况下重新抛出异常return 0;异常处理是C++中处理错误的强大机制,但需要谨慎使用才能充分发挥其优势。基础机制:理解try-catch-throw语法和栈展开过程。
2025-04-29 13:12:23
797
1
原创 C++学习:六个月从基础到就业——模板编程:模板元编程基础
模板元编程是一种编程范式,它利用C++模板系统在编译期进行计算和类型操作。通过模板实例化和特化机制,我们可以创建在编译时执行的"程序",而不是在运行时执行的传统程序。使用类型作为值使用模板特化作为条件语句使用递归模板实例化作为循环使用模板实例化作为函数调用虽然这种编程方式看起来非常不同,但它可以实现与传统编程相同的计算功能,只不过是在编译时进行的。模板元编程是C++中一种独特而强大的编程范式,它允许我们在编译期进行计算和类型操作,从而实现零运行时开销的抽象和优化。
2025-04-29 12:15:31
1107
原创 C++学习:六个月从基础到就业——模板编程:SFINAE原则
SFINAE是"Substitution Failure Is Not An Error"(替换失败不是错误)的缩写,它是C++模板实例化过程中的一个基本原则。简单来说,当编译器尝试用具体类型替换模板参数时,如果替换导致了无效的代码(例如,使用了不存在的类型成员或无效的运算),编译器不会立即报错,而是简单地将该模板从重载解析的候选集中移除。这一原则允许我们编写基于类型特性的条件模板代码。例如,我们可以为具有特定成员函数的类型提供一个版本的函数,为其他类型提供另一个版本。// 这个版本只对整数类型有效。
2025-04-28 11:50:38
1615
2
原创 C++学习:六个月从基础到就业——模板编程:可变参数模板
可变参数模板使用省略号(...)来表示模板参数包或函数参数包。// 可变参数函数模板// 可变参数类模板其中,Types是一个模板参数包,它可以匹配零个或多个模板参数;args是一个函数参数包,它可以匹配零个或多个函数参数。可变参数模板是C++11引入的一项关键特性,彻底改变了泛型编程的形态。创建接受任意数量和类型参数的函数和类实现类型安全的可变参数函数,替代不安全的printf风格接口优雅地实现元组、变体类型、函数绑定等高级数据结构编写更加灵活和可扩展的通用库组件。
2025-04-28 11:47:43
470
1
原创 C++学习:六个月从基础到就业——模板编程:模板特化
模板特化是为特定的模板参数提供专门实现的机制。当使用特定类型实例化模板时,编译器会优先选择匹配该类型的特化版本,而不是通用模板。全特化(Full Specialization):为模板的所有参数提供具体类型。偏特化(Partial Specialization):只为部分模板参数提供具体类型或特征,仍保留一些参数作为模板参数。注意,函数模板只支持全特化,不支持偏特化。模板特化是C++泛型编程的强大工具,允许我们为特定类型提供专门的实现,同时保持代码的通用性。模板特化的基础。
2025-04-27 21:47:06
1083
1
原创 C++学习:六个月从基础到就业——模板编程:类模板
类模板的定义使用templatetemplate <typename T> // 或 template <class T>private:public:这里定义了一个简单的容器类模板,可以存储任意类型的元素。模板参数T在类定义中用作占位符,表示将来使用类模板时会被具体类型替换。类模板的成员函数可以在类内定义,也可以在类外定义。// 类内定义(如前面例子中的size()函数)public:} // 直接在类内定义// ...其他声明// 类外定义count(0),
2025-04-27 21:43:49
1116
14
原创 C++学习:六个月从基础到就业——模板编程:函数模板
函数模板的定义使用templatetemplate <typename T> // 或者 template <class T>a : b;在这个例子中,T是一个类型参数,它作为一个占位符,表示在函数实例化时会被替换为具体的类型。// 查找元素= end) {++begin;return end;// 计算元素数量= end) {++count;++begin;// 转换元素= end) {++begin;++result;// 累积操作= end) {
2025-04-26 18:07:52
879
原创 C++学习:六个月从基础到就业——STL:分配器与设计原理
分配器是一个封装了内存分配和释放策略的类,它为STL容器提供了统一的内存管理接口。内存分配:为容器中的元素分配内存内存释放:释放不再需要的内存分配器使得容器的内存管理与其算法逻辑分离,符合单一职责原则,同时提供了灵活性,允许用户根据需要替换默认的内存管理策略。// 一个简单的自定义分配器示例public:// 类型定义(C++17以及之后)// 构造函数和析构函数// 复制构造函数// 分配内存return p;// 释放内存。
2025-04-26 18:05:57
932
原创 C++学习:六个月从基础到就业——STL:函数对象与适配器
函数对象是一个实现了函数调用运算符(operator())的类或结构体的实例。由于它可以像函数一样被调用,因此也被称为仿函数。// 基本函数对象示例int value;// 函数调用运算符// 使用函数对象// 等同于调用addFive.operator()(10)// 输出:10 + 5 = 15// 创建临时函数对象并立即调用// 输出:7 + 3 = 10return 0;STL在头文件中提供了一系列的预定义函数对象,这些函数对象执行常见的算术、比较和逻辑操作。
2025-04-25 09:09:22
1036
2
原创 C++学习:六个月从基础到就业——STL算法(四)数值算法(下)与集合算法
accumulate和iota。高级数值应用:数值积分、数值微分和移动平均。set_unionincludes和merge。实际应用示例:用户兴趣分析和文本相似度计算。最佳实践与性能考量。这些算法为处理数值数据和有序集合提供了强大的工具,掌握它们可以帮助你编写更简洁、高效的代码,避免重新发明轮子。在下一篇文章中,我们将探讨STL算法的实际应用案例,展示如何将这些算法组合起来解决复杂的实际问题。
2025-04-25 09:00:16
763
原创 C++学习:六个月从基础到就业——STL算法(三)—— 数值算法(上)
STL的数值算法主要定义在<numeric>头文件中,它们提供了一系列用于数值计算的函数模板。与其他STL算法一样,这些数值算法也是通过迭代器操作容器元素,因此可以应用于任何满足迭代器要求的容器。- 计算序列元素的累加值或通过指定操作的累积值- 计算两个序列的内积或通过指定操作的组合值- 计算序列的部分和(即前缀和)- 计算序列中相邻元素的差值std::iota- 用连续递增的值填充序列此外,C++17新增了几个并行版本的数值算法,如等,它们提供了更高的性能和灵活性。
2025-04-24 20:18:29
978
1
原创 C++学习:六个月从基础到就业——STL算法(二)排序与变序算法
本文详细介绍了STL算法库中的排序和变序算法,这些算法为C++程序员提供了强大的数据处理工具。排序算法std::sort:通用快速排序:稳定排序:部分排序:定位第N个元素和:排序状态检查二分查找算法:检查元素是否存在和:查找边界:查找等值范围变序算法:反转元素顺序:旋转元素:随机打乱元素和:生成排列通过实例,我们展示了这些算法在实际应用中的用法,如数据排序、查找、随机采样和排列生成等。掌握这些算法可以帮助你编写更简洁、高效的代码,并且避免重复发明轮子。
2025-04-24 20:02:56
1815
26
原创 C++学习:六个月从基础到就业——STL算法(一) 基础与查找算法
STL算法库是C++标准模板库的一部分,提供了一系列用于处理容器元素的通用函数模板。这些算法通过迭代器操作容器中的元素,使得相同的算法可以应用于不同类型的容器,实现了代码的高度复用。STL算法库主要位于头文件中,还有部分数值算法位于<numeric>头文件中。遍历算法:如for_each和for_each_n查找算法:如findfind_ifsearch和计数算法:如count和count_if比较算法:如equalmismatch和条件检查算法:如all_ofany_of和none_of特殊查找算法。
2025-04-23 16:57:43
1765
18
原创 C++学习:六个月从基础到就业——C++学习之旅:STL迭代器系统
迭代器是一种行为类似于指针的对象,提供了一种访问容器中元素的方式,而不需要暴露容器的内部实现。通过迭代器,我们可以遍历集合、访问集合中的元素,并且根据需要修改这些元素。迭代器抽象了底层容器的实现细节,提供了一套统一的接口,使得算法可以工作在各种不同的容器上,而无需知道这些容器的具体实现。有时候,我们需要为自定义容器实现迭代器。// 简单的环形缓冲区private:// 开始位置// 元素数量public:++count;else// 环形缓冲区满了,覆盖最旧的元素。
2025-04-23 16:55:58
806
5
原创 C++学习:六个月从基础到就业——C++学习之旅:STL容器详解
STL容器是存储数据集合的类模板,它们遵循特定的设计模式,提供标准化的接口,并且拥有各自的性能特点。容器是STL三大核心组件(容器、算法、迭代器)中最为基础的部分。
2025-04-22 09:14:11
1802
14
原创 C++学习:六个月从基础到就业——内存管理:自定义内存管理(下篇)
C++标准库容器允许我们通过自定义分配器来控制内存分配行为,这是一种将自定义内存管理与标准容器结合的强大方式。游戏开发对内存管理有特殊要求,包括高性能、可预测的延迟和减少内存碎片。// 简单的游戏对象// 位置// 速度int health;// 生命值int id;// 唯一标识符// 是否活跃if (!// 简单的物理更新id = newId;x = posX;y = posY;z = posZ;
2025-04-22 08:36:03
611
基于python的实验,共有六个,学习的书籍是python程序设计基础
2025-03-13
YOLOv8基于视频的帧图像识别与目标检测实战:从项目文件结构开始到多场景应用的解析(包括完整代码、识别前和识别完的视频)
2025-03-09
zotero参考文献格式:GB/T 7714-2015,顺序编码,双语,姓名不大写,无 URL、DOI,引注有页码
2025-03-09
基于51单片机的串口主从机通信,能够在L1602液晶屏幕上实时显示电流并监测电压(包括proteus8仿真keil工程文件)
2023-05-15
基于STM32F103R6的HAL库开发的十字路口交通灯设计(附带proteus仿真+keil工程代码)
2023-05-03
基于51单片机的超声波油量距离检测报警系统(附带proteus仿真+keil工程代码)
2023-05-03
Esp32 for Arduino2.0.7支持文件 Windows win10 64位
2023-03-16
torchvision MNIST手写数字图像数据集
2022-05-10
美国King County房价预测训练赛 机器学习 KingCounty房屋销售价格以及房屋的基本信息 模型训练
2022-05-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人