
C/C++
文章平均质量分 84
95号闪电麦坤
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++:结构体(Structure)
摘要:本文介绍了C语言中结构体的基本概念和使用方法。结构体是一种将多个相关数据组合成新类型的机制,通过struct关键字定义。文章详细讲解了结构体的定义方式(包括typedef简化)、初始化方法、成员访问(.和->运算符)、内存大小计算(含字节对齐问题),以及结构体作为函数参数的三种传递方式(按值、指针、引用)。结构体能有效组织数据、提高代码可读性和可扩展性,是C语言中重要的复合数据类型实现方式。 (149字)原创 2025-07-31 22:53:50 · 954 阅读 · 0 评论 -
C++:参数传递方法(Parameter Passing Methods)
本文摘要: 文章系统介绍了函数参数传递的三种方式:1)值传递(Pass by Value),传递变量副本,安全但不影响原数据;2)地址传递(Pass by Address),通过指针修改原变量,高效但需注意空指针;3)引用传递(Pass by Reference),C++特有机制,语法简洁且高效。同时分析了数组作为函数参数的实现原理(退化为指针)及安全返回数组的方法(堆内存或静态数组)。此外,文章还简要说明了函数和结构体的定义及作用,强调其模块化和数据管理的优势。原创 2025-05-31 12:13:04 · 892 阅读 · 0 评论 -
C++:指针(Pointers)
指针是存储数据地址的变量,用于间接访问数据。它的核心作用包括:1.访问堆内存,实现动态内存分配(通过malloc/new);2.管理外部资源(如文件、网络等操作系统资源);3.高效参数传递(避免大对象复制,直接修改原数据)。使用指针时需注意:分配后检查非空,使用后及时释放(free/delete),防止内存泄漏。C++推荐使用new/delete代替malloc/free,因其更安全且支持对象构造/析构。指针是实现动态数据结构和资源管理的核心机制。原创 2025-05-31 10:10:40 · 899 阅读 · 0 评论 -
c++:进阶语法总结
本文摘要: C++中阶学习聚焦高级特性与OOP编程,涵盖面向对象核心概念(封装、继承、多态)、智能指针内存管理、STL进阶用法(容器/算法/迭代器)、现代C++特性(11/14/17标准)、异常处理、多线程编程、文件操作及模板编程。重点包括虚函数机制、移动语义、lambda表达式、线程同步技术等,旨在培养编写复杂程序能力,为系统级开发奠定基础。特别注意现代C++在资源管理、并发编程方面的改进,如智能指针解决内存泄漏、std::async简化异步任务等实践要点。原创 2025-05-29 08:21:23 · 808 阅读 · 0 评论 -
c++:初级语法总结
摘要:本文概述了C++初级阶段的9个核心学习内容,包括基本语法与数据类型、控制结构、函数、数组/字符串、指针/引用、STL基础、结构体/枚举以及动态内存管理。重点强调了变量作用域、输入输出安全、运算符优先级、循环控制、函数参数传递、指针内存管理、STL容器使用等关键概念,并提示了常见错误规避点(如数组越界、内存泄漏)。学习者应掌握基础编程能力,能编写包含控制逻辑和简单数据结构的小型程序,为后续学习奠定基础。(149字)原创 2025-05-29 08:18:39 · 766 阅读 · 0 评论 -
c++:有序关联容器(std::set)
🔧 红黑树是一种特殊的二叉搜索树(BST),满足这些规则:每个节点不是“红色”就是“黑色”根节点是黑色所有叶子节点(nullptr)是黑色红色节点的子节点必须是黑色从任一节点到其所有叶子节点的路径中,黑色节点数相同(黑高平衡)通过这些规则,红黑树保持平衡,避免出现像链表那样的“最坏情况”默认是从小到大排序。也可以写自己的比较函数(用于排序对象类型)。原创 2025-05-12 10:14:44 · 1258 阅读 · 0 评论 -
c++:算法(Algorithms)
C++ STL(标准模板库)中的算法是 STL 的三大核心组成之一,另外两个是和。STL 提供了大量的泛型算法,这些算法不依赖于特定容器,而是通过迭代器操作容器中的元素。这一设计体现了 STL 的高度抽象性和复用性。原创 2025-05-12 08:11:02 · 730 阅读 · 0 评论 -
c++:双端队列容器(std::deque)
std::deque 是 双端队列容器,允许在队列两端进行快速插入和删除。它的全称是:Double Ended Queue你可以把它看作是:vector 的增强版,可以在头尾都插入删除,但依然支持随机访问。原创 2025-05-10 09:52:04 · 955 阅读 · 0 评论 -
c++:双向链表容器(std::list)
std::list是C++标准库中的双向链表容器,每个节点包含值及指向前后节点的指针。其特点包括:支持高效插入和删除(O(1)时间复杂度),但不支持随机访问。与std::vector(动态数组)相比,std::list在中间插入/删除操作上更高效,但遍历和空间利用率较低。常见操作包括push_back、push_front、insert、erase、remove等。原创 2025-05-09 23:20:48 · 980 阅读 · 0 评论 -
c++:迭代器(Iterator)
迭代器 = “智能指针”,用来一个一个地访问容器中的元素。你可以想象迭代器像是容器中的“手指”或“光标”:指着某个元素可以向前走(甚至有些还能往后走)能取出或修改元素示例对比:用数组 vs 用迭代器i < 3;i++) {改成vector+ 迭代器写法:it!= v.end();++it) {v.begin():返回指向第一个元素的迭代器v.end():返回“超出最后一个元素的下一个位置”的迭代器*it:表示取出当前指向的元素++it:移动到下一个元素。原创 2025-05-09 22:33:15 · 1002 阅读 · 0 评论 -
c++:标准模板库 STL(Standard Template Library)
定义:STL(Standard Template Library) 是 C++ 标准库的一部分,它是一套使用模板技术实现的通用 数据结构和算法库。可以理解为:“一个高度模块化、高性能、高度泛型的编程工具箱。它实现了大量经典数据结构(如:数组、链表、栈、队列、哈希表、平衡树等)和常用算法(如:排序、查找、复制、替换等)。原创 2025-05-09 16:39:26 · 1002 阅读 · 0 评论 -
c++:编译链接过程
预处理器把#include文件展开为真实代码把#define宏替换为实际值去掉注释// 展开iostream✅输出文件:预处理后的.i文件(可选)原创 2025-05-09 12:47:44 · 681 阅读 · 0 评论 -
c++:库(Library)
库就是一堆 别人写好的代码打包好的文件,让你可以直接调用里面的函数或类,而不需要自己从零写。举个例子:你就像用现成的“排序工具”,节省了造轮子的时间。原创 2025-05-09 11:31:05 · 850 阅读 · 0 评论 -
c++:线程(std::thread)
线程(Thread)是程序内部能并发执行的最小单位。线程 = 程序里可以独立并发执行的一段任务。一个程序至少有一个线程(主线程),你可以再创建多个线程来同时执行不同的代码块。原创 2025-04-19 23:05:13 · 619 阅读 · 0 评论 -
c++:Lambda(匿名函数)
Lambda 就是可以定义在表达式中的“匿名函数”,你可以像变量一样定义、传递、调用它!它允许你“像写变量一样写函数Lambda 是现代 C++ 的匿名函数利器,它让你可以像操作变量一样操作函数,让函数更短、更灵活、更局部、更智能。原创 2025-04-18 11:25:20 · 623 阅读 · 0 评论 -
c++:new关键字
3. 面向对象 + 多态时必须用指针(虚函数才生效)是你要创建的类型(可以是基本类型、结构体、类等)(C语言方式)只分配内存,不会调用构造函数。2. 创建大小在运行时才能确定的数组。,因为它支持对象语义(构造/析构)。1.不要忘记释放内存,否则内存泄漏。2. 类对象(调用构造函数)这也是为什么:C++ 推荐使用。是一个指针,指向这个对象。的时候调用,析构函数在。1. 动态生命周期管理。原创 2025-04-13 23:01:53 · 264 阅读 · 0 评论 -
c++:构造函数(Constructor)与析构函数(Destructor)
构造函数?构造函数是一种特殊的函数,在你创建对象的时候,自动调用,用来进行初始化。关键点:它和类同名。它没有返回值。它在对象创建的那一刻被调用(不是你手动调用,它自动来)。它的存在是为了:让对象一出生就是“有意义的、完整的”状态。// 构造函数name = n;age = a;// ← 自动调用构造函数你创建对象的时候,构造函数就被调用,把 name 和 age 初始化成你想要的值。析构函数是一个在对象“销毁”时自动调用的特殊函数。原创 2025-04-13 21:53:27 · 638 阅读 · 0 评论 -
c++ 函数指针(Function Pointer)
在 C++ 中,一个函数的作用就是:将一段操作逻辑“封装起来”,并给它起个名字,以便反复调用。// 固定调用了名为 add 的函数这一切都很好,但你会发现 —— 有些场景不够灵活:如果我想把“函数”当作“参数”传进去呢???我想要:传进去一个函数add,就加法;传进去一个函数mul,就乘法。能不能把“函数本身”当作一个变量来用?就像你传变量一样传函数?答案是可以的!用函数指针!函数指针是一个指向函数入口地址的指针变量。函数本质上也是一段代码,它在内存中有地址。原创 2025-03-31 11:31:34 · 766 阅读 · 0 评论 -
c++ 命名空间( namespace)
这就创建了一个名为MySpace的命名空间,它里面可以定义函数、变量、类、结构体等。命名空间是 C++ 提供的一种命名隔离机制,帮助你组织代码、避免符号冲突,是大型工程不可或缺的模块化工具。原创 2025-03-23 22:29:41 · 806 阅读 · 0 评论 -
c++ auto关键字
编译器推导出 funcPtr_auto 的类型为 int (*)(int, int),即指向接受两个 int 参数并返回 int 的函数指针。中,add 是一个函数名,隐式转换为函数指针。注意:如果需要显式指定函数指针的类型,可以用 auto*,但通常不需要,因为 auto 已足够。函数指针特例:auto 推导函数指针时,不会意外变成函数类型,而是直接推导为指针。默认情况下,auto 会丢弃 const 和 volatile,需要显式指定。对于函数指针,auto 直接推导为指针类型,无需额外加 *。原创 2025-03-08 11:29:01 · 353 阅读 · 0 评论 -
c++:静态数组(std::array)
std::array 的大小在定义时通过模板参数指定,例如 std::array<int, 5> 表示一个包含 5 个 int 的数组。empty():检查数组是否为空(对于 std::array 总是返回 false,因为大小固定)。arr.at(index):带边界检查,如果越界会抛出 std::out_of_range 异常。可以用初始化列表:std::array<int, 3> arr = {1, 2, 3};max_size():返回数组的最大可能大小(等于 size())。原创 2025-03-08 11:14:53 · 1609 阅读 · 0 评论 -
c++ 重写基类成员函数
在 C++ 中,函数重写是指在派生类(子类)中重新定义基类(父类)中声明为 virtual 的虚函数,以提供子类自己的实现。重写是实现**运行时多态性(Runtime Polymorphism)**的关键机制,允许通过基类指针或引用调用子类的具体实现。简单来说:基类定义了一个虚函数(用 virtual 关键字标记)。子类对这个函数进行重新实现,替换基类的默认行为。当通过基类指针或引用调用该函数时,实际执行的是子类的版本。原创 2025-03-07 22:37:32 · 987 阅读 · 0 评论 -
c++ 静态 static关键字
类型生命周期作用域初始化时机静态局部变量程序运行期间函数内部第一次调用时静态全局变量程序运行期间文件内部程序启动时静态函数程序运行期间文件内部无需初始化静态成员变量程序运行期间类范围类外定义时静态成员函数程序运行期间类范围无需初始化7. 常见问题为什么用 static?控制作用域(限制访问)。延长生命周期(避免重复初始化)。实现类级别的共享数据或行为。和非静态的区别?非静态变量/函数依赖对象实例,每次创建对象时分配内存;原创 2025-03-06 21:05:16 · 968 阅读 · 0 评论 -
c++ 作用域解析操作符::
在C++中,:: 是作用域解析操作符(Scope Resolution Operator)。它的作用是告诉编译器某个标识符(变量、函数、类、枚举等)属于哪个作用域。C++中有很多作用域(比如全局作用域、类作用域、命名空间作用域等),当名字冲突或者需要明确指定时,:: 就派上用场了。简单来说,:: 是用来“指路”的,帮助编译器找到正确的定义或声明。在类外定义类的成员函数时(尤其是静态成员或普通成员),需要用 :: 指定函数所属的类。public:// 声明// 类外定义Example ex;原创 2025-03-06 19:26:28 · 1054 阅读 · 0 评论 -
c++ 接口/多态
接口可以看作是类与类之间通信的桥梁。它只声明方法(或函数)的签名(如名称、参数、返回值类型),而不关心这些方法如何实现。实现接口的类必须按照接口的定义提供具体实现。多态,字面意思是“多种形态”,在编程中指的是同一个接口或方法可以在不同的对象上表现出不同的行为。换句话说,多态允许用统一的接口调用不同类的实现,而具体执行哪个实现取决于对象的实际类型。通俗解释:多态就像一个遥控器,按下“播放”按钮,不同设备(电视、音响、DVD播放器)会有不同的反应,但你只需要知道“按播放”就行,不用管背后是哪种设备。原创 2025-03-05 23:06:19 · 1004 阅读 · 0 评论 -
c++ 纯虚函数
纯虚函数是在基类中声明但没有提供实现的虚函数。通过在函数声明后添加= 0,它被标记为“纯虚”。纯虚函数的目的是强制派生类提供自己的实现。virtual 返回类型 函数名(参数列表) = 0;示例:public:// 纯虚函数注意:纯虚函数没有函数体 {},= 0 表示它是纯虚的。原创 2025-03-05 10:42:31 · 980 阅读 · 0 评论 -
c++ 虚函数
虚函数是 C++ 中在基类中声明为 virtual 的成员函数,允许派生类重写(override)它。当通过基类指针或引用调用虚函数时,C++ 会根据对象的实际类型(而不是指针或引用的类型)来决定调用哪个版本的函数。这种行为称为动态绑定或运行时多态。原创 2025-03-05 09:33:40 · 351 阅读 · 0 评论 -
c++ 继承
继承是 C++ 中一种机制,允许一个类(称为派生类或子类)从另一个类(称为基类或父类)继承属性和方法。通过继承,子类可以重用父类的代码,扩展或修改其功能,从而提高代码的可重用性和组织性。原创 2025-03-05 09:17:04 · 312 阅读 · 0 评论 -
c++ const 关键字
在 C++ 中,const 是一个非常重要的关键字,用于声明常量或限制变量、函数参数、返回值等的修改。它的使用场景多样,语法也很灵活。下面我将详细讲解 const 的主要用法和语法规则,并配上简单的例子来说明。原创 2025-03-03 10:06:05 · 838 阅读 · 0 评论 -
C++ 标准库容器的常用成员函数
C++ 标准库容器在 <vector>、<list>、<map> 等头文件中定义,属于 STL(标准模板库)的一部分。std::vector(动态数组)、std::array(固定数组)、std::list(双向链表)、std::deque(双端队列)。std::map(键值对映射)、std::set(唯一键集合)。std::unordered_map、std::unordered_set(哈希表实现)。每个容器都有一套成员函数,用于操作容器中的元素、管理大小和访问数据。原创 2025-03-02 20:33:34 · 924 阅读 · 0 评论 -
c++ static_cast<int>类型转换操作符
static_cast 是 C++ 中的一种类型转换关键字,用于在编译时执行类型转换。<int> 指定目标类型,这里是将某个值转换为整数类型(int)。用法:static_cast<int>(expression),将 expression 的值转换为 int。编译时完成,截断浮点数的小数部分。作用:确保类型匹配,提高代码安全性与可读性。原创 2025-03-01 10:13:17 · 791 阅读 · 0 评论 -
c++ this 关键字
在 C++ 中,this 是一个特殊的指针,指向当前对象的实例。它在类的成员函数中自动可用,主要用于解决命名冲突或者明确指代当前对象的成员。原创 2025-02-27 10:53:50 · 525 阅读 · 0 评论 -
c++ 多个.cpp文件运行
在一个C++项目中,多个.cpp文件不能同时拥有并运行多个main函数,因为C++程序只能有一个入口点(main函数)。编译器在链接时会报错“multiple definition of main”的错误。原创 2025-02-25 22:27:11 · 741 阅读 · 0 评论 -
c++ 宏(macro)
宏的本质:编译前的文本替换机制 宏是一种在 预处理阶段(Preprocessing) 执行的代码替换工具。原创 2025-02-25 08:54:32 · 1147 阅读 · 0 评论 -
c++ 栈(Stack)和堆(Heap)
栈是一种先进后出(LIFO,Last In First Out)的数据结构,它用于存储局部变量、函数调用的返回地址等信息。原创 2025-02-24 22:51:10 · 1092 阅读 · 0 评论 -
c++:模板(template)
C++ 模板就是“用类型做参数”的工具,让你写出能适应各种类型的通用代码,是 C++ 泛型编程的基石。原创 2025-02-18 14:19:43 · 1055 阅读 · 0 评论 -
c++动态数组 std::vector 性能优化
容量初始为 1(或者 0),现在需要扩容!把这个临时对象拷贝进去(调用拷贝构造) ✅ 第一次。➡️ 总共调用:仅 1 次构造函数,没有拷贝/移动。容量不足时,它还会将已有元素 重新拷贝到新内存。➡️ 总共会调用:1次构造 + 1次拷贝/移动。是 “先创建,再拷贝/移动进 vector”将它 拷贝进 vector (如果不能移动)(已有的1个 + 新的1个)(已有的2个 + 新的1个)拷贝已有元素(现在是2个)容量不够,再次扩容,从。这几行代码做了什么?拷贝已有元素(1个)再拷贝新元素(1个)原创 2025-02-16 14:22:47 · 327 阅读 · 0 评论 -
c++ 动态数组( std::vector)
vector是 C++ 提供的“自动化动态数组”,本质是用堆内存 + 封装管理 + 自动扩容,实现了内存安全与操作便利的平衡。原创 2025-02-16 11:18:07 · 1128 阅读 · 0 评论 -
c++重载输出流运算符详解
你可能会想:我能不能写成成员函数呢?// ❌ 不推荐但是这样不行,因为:,而不是std::cout是ostream类型,不是你的类的对象所以你必须让operator<<是一个非成员函数,但又能访问私有成员(比如m_buffer💡 解决方法就是:用友元函数(friend。原创 2025-02-15 19:08:10 · 1024 阅读 · 0 评论 -
c++:拷贝构造函数(Copy Constructor)
时,我们通常会采用深拷贝的策略,以避免资源共享问题。原创 2025-02-15 17:28:46 · 998 阅读 · 0 评论