C++
文章平均质量分 95
狂热CPP
秦少游在淮海
自由
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
网络缓冲区 · 通过读写偏移量维护数据区间的高效“零拷贝” Buffer 设计
本文设计了一个高效的网络缓冲区Buffer,用于解决TCP协议中的粘包与半包问题。Buffer采用三段式内存模型(已读/可读/可写),通过读写指针(_reader_idx/_writer_idx)管理状态,使用vector<char> 存储数据并实现自适应扩容机制。关键设计包括:细粒度接口将数据操作与状态推进解耦、支持零拷贝优化、提供多种读写方法。相比muduo库的基础版本,该Buffer更注重状态机设计和二进制流处理,适用于高并发网络服务器的Reactor模型,能有效管理不完整的socket读写原创 2025-12-17 16:50:44 · 580 阅读 · 0 评论 -
C++ vector底层实现与迭代器失效问题
本文详细介绍了C++中vector容器的模拟实现过程。主要内容包括:1. 基本框架搭建,包括迭代器定义和成员变量设计;2. 核心功能实现,如构造/析构函数、push_back/pop_back、reserve/resize等;3. 迭代器失效问题分析,重点讨论了insert/erase操作带来的风险及解决方案;4. 内存管理优化,指出memcpy浅拷贝的缺陷并改用赋值实现深拷贝;5. 多种构造方式实现,包括initializer_list构造和迭代器区间构造。文章通过大量代码示例和测试案例,深入剖析了vec原创 2025-08-02 17:22:48 · 1073 阅读 · 0 评论 -
C++ - 浅看vector源码
本文分析了SGISTL 3.0中vector源码的核心实现。主要关注stl_vector.h文件,重点解析了三个关键成员变量(start、finish、end_of_storage)的关系,它们分别表示有效数组区间起始、结束和存储空间末尾。文章通过构造函数和push_back函数示例,展示了vector的空间管理和扩容机制,强调未初始化空间需使用定位new操作。此外,还介绍了阅读源码的三个关键步骤:理解功能需求、梳理类框架结构和绘制类关系图,为源码阅读提供了方法论指导。原创 2025-06-28 16:56:36 · 1121 阅读 · 0 评论 -
C++ - vector 的相关练习
在C++中,对于vv[i][j]而言,是两次函数调用;对于C语言来说,静态开辟的一维数组或者二维数组均是一次解引用实现数据的访问,数组的访问本质上均会转换成指针的访问,所以C语言的访问数组中的元素一定会转换成对指针的解引用;vv[i][j] 会转化成 vv.operator[](i).operator[](j) ;其中 vv.operator[](i) 返回的是 vector<int> 的对象,而vector<int>.operator[](j) 返回值为 int 对象;相当于第一个 operator[]原创 2025-06-26 15:06:25 · 837 阅读 · 0 评论 -
C++ - vector 的使用
本文详细介绍了C++标准库中vector容器的主要特性与使用要点。首先阐述了vector作为顺序表的本质,解析了其接口函数包括构造函数、迭代器、容量管理(resize和reserve)及扩容机制(VS以1.5倍、Linux以2倍扩容)。通过与string的对比,强调vector<char>与string的本质区别(后者包含'\0'),并指出vector不支持find等string特有功能。在使用注意事项方面,重点说明了隐式类型转换、范围for的引用优化、迭代器的封装价值及其在算法中的通用性(如f原创 2025-06-21 09:24:45 · 824 阅读 · 0 评论 -
string的底层实现
string 实际上是一个叫做 basic_string 的模板类;以前我们所理解的串都是char* 的字符串,而实际上由于编码的原因还有几种串:char、wchar_t(宽字符)、char16_t(UTF16)、char32_t(UTF32);原创 2025-06-19 09:49:35 · 948 阅读 · 0 评论 -
c++ - 关于 string 的练习题
本文整理了4道字符串处理经典算法题:1)反转字母(双指针交换法);2)首个不重复字符(哈希统计法);3)大数相加(模拟进位运算);4)末单词长度(反向查找法)。重点讲解了各题的解题思路和优化方法,包括使用isalpha判断字母字符、计数排序统计字符频率、处理进位问题等技巧。每道题都提供了参考代码和关键说明,强调合理使用string类接口函数的重要性,如getline读取带空格字符串、rfind反向查找等。原创 2025-06-12 16:15:57 · 1260 阅读 · 0 评论 -
C++ - STL #什么是STL #STL的版本 #闭源开源 #STL的六大组件
STL(标准模板库)是C++标准库的核心组件,由Alexander Stepanov等人在惠普实验室开发,采用泛型编程范式提供高效的数据结构与算法实现。主要版本包括HP原始版本、P.J.商业版本和SGI开源版本,各版本底层实现存在差异。STL包含六大组件,其中内存池(空间配置器)是提升容器效率的关键机制。STL作为可复用的软件框架,在C++开发中具有重要地位,需要开发者熟练掌握其接口使用。开源与闭源实现各有优缺点,STL的不同版本也体现了这一特性。原创 2025-05-31 10:50:47 · 1308 阅读 · 0 评论 -
C++ - 模板(一) #泛型编程 #函数模板 #类模板
本文介绍了C++中泛型编程的核心概念——模板。主要内容包括:函数模板:通过template声明通用代码框架,编译器根据实参类型自动生成具体函数,解决代码复用问题。重点讲解了隐式/显式实例化及模板参数匹配原则。类模板:允许创建可处理多种数据类型的通用类,必须显式实例化。以栈类为例演示了类模板实现,强调成员函数定义需与声明放在同一文件。模板优势:相比typedef和函数重载,模板能更好实现类型无关的通用代码,提升代码复用率和可维护性。文中通过交换函数和栈类的改造案例,展示了模板的实际应用价值。原创 2025-05-30 10:16:38 · 1120 阅读 · 0 评论 -
C++ - 内存管理 #new/delete #operator new/operator delete #placement-new #异常
new[] 的时候转换成指令知道自己要new 多少个对象,但是delete 由于不知道new 了多少个对象,也就不知道自己要调用多少次析构函数;所以new[] 开辟空间时会在原基础上多开辟4byte 的空间,而返回的p4 是这4byte 之后的地址,即返回的是本应开辟的空间的起始地址;当delete[] 转换成指令之后会从实际应该开的空间的首地址(p4)往前减 4byte 的空间去获取该4byte 空间中存放的值,那么delete[] 便就会知道需要调用多少次析构函数;当operator delete[]原创 2025-05-28 09:56:41 · 1131 阅读 · 0 评论 -
C++ - 类和对象 #取地址运算符重载 #构造函数 #类型转换 #友元 #static 成员 #内部类 #匿名对象 #对象拷贝时编译器的优化
本文深入探讨了C++中的多个关键概念,包括取地址运算符重载、构造函数的初始化列表、类型转换、友元、静态成员、内部类、匿名对象以及对象拷贝时的编译器优化。文章详细解释了const成员函数的作用、取地址运算符的重载方式、初始化列表的必要性及其使用场景。此外,还介绍了类型转换的隐式与显式机制、友元函数与友元类的应用、静态成员变量的特性及其初始化方法。内部类的定义及其与外部类的关系、匿名对象的生命周期及其使用场景也被详细讨论。最后,文章分析了编译器在对象拷贝时的优化策略,强调了编译器如何在不影响程序正确性的前提下提原创 2025-05-19 10:19:08 · 815 阅读 · 0 评论 -
C++ - 类和对象 #日期类的实现
首先,要实现日期类,构造函数是一定是要我们显式实现的,但因为日期类的成员变量均为内置类型且不涉及资源,所以其拷贝构造函数、赋值运算符重载函数、析构函数均无需我们显式实现,编译器自动生成的便够用;以及还需要我们实现日期类相关的功能,例如:日期相减、日期加天数等;注:1、类中成员函数的声明和定义分离时,在定义该函数的时候需要指定类域2、缺省参数只能在声明给,在定义中不给此处日期类的实现,我们会分文件,将类的主体放在Date.h 之中,将日期类中成员函数的定义放到Date.cpp 中;原创 2025-05-08 11:02:18 · 1198 阅读 · 0 评论 -
C++ - 类和对象 #类的默认成员函数 #构造函数 #析构函数 #拷贝构造函数 #运算符重载函数 #赋值运算符重载函数
1、当我们不显式实现这个函数的时候编译器会默认帮我们生成,这个函数就是默认成员函数,默认成员函数有6个,在C++11 中还会增加2个;但是编译器帮我们实现的默认成员函数可能并不会符合我们的预期,所以此时就需要我们自己来实现这个默认成员函数;在这个过程中,我们需要理解编译器的默认生成的行为、以及我们如何实现;2、构造函数是特殊的成员函数,在对象实例化时去初始化对象;3、析构函数并不是完成对对象本身的销毁,对象在销毁时会自动调用析构函数,完成对象中资源的清理释放工作。4、如果一个构造函数的第一个参数原创 2025-05-04 16:36:19 · 1130 阅读 · 1 评论 -
C++ - string 的使用 #auto #范围for #访问及遍历操作 #容量操作 #修改操作 #其他操作 #非成员函数
本文介绍了C++11 中的auto 、范围for,从string 对象访问遍历操作、容量操作、对象修改操作、不同平台下string 的扩容机制、find 和 replace 替换指定字符、其他操作、非成员函数深度讲解string 的使用;原创 2025-06-08 17:41:42 · 398 阅读 · 0 评论 -
C++ - 类和对象 # 类的定义 #访问限定符 #类域 #实例化 #this 指针 #C++ 与 C语言的比较
class为定义类的关键字,Stack 为类的名字,{} 中为类的主体,注意类定义结束的时候其后面的分号不可以省略。类体中的内容称为类的成员:类中的变量称为类的属性或成员变量,类中的函数称为类的方法或者成员函数。为了区分成员变量,一般习惯上成员变量会加一个特殊的标识,如成员变量前或者后面加 _ 或者 m 开头,注意C++ 中这个并不是强制的,只是一些惯例,具体需要看公司的要求;C++ 中 struct 也可以定义类,原创 2025-04-27 11:21:24 · 986 阅读 · 0 评论 -
C++ - #命名空间 #输入、输出 #缺省参数 #函数重载 #引用 # const 引用 #inline #nullptr
引用在实践中主要是于引用传参和引用做返回值中减少拷贝提高效率和改变引用对象时同时改变被引用对象(相较于传址调用,改变形参也可以改变实参);引用传参跟指针传参功能时类似的,引用传参相对更加方便一些;引用返回值的场景相对比较复杂,本篇只做简单的介绍,更加深入的探索会在后文的“类和对象”之中;引用和指针在实践当中相辅相成,功能有重叠性,但是各有特点,互相不可替代;C++的引用跟其他语言的引用(如Java)是有很大的区别的,除了用法,最大的特点是:C++引用定义后不可以更改指向,但是Java 的引用可以更改指原创 2025-04-15 17:07:16 · 730 阅读 · 0 评论 -
C++ - 认识C++
随着AI的发展,未来是否会利用AI工具来重写C++代码?AI 工具(如 Copilot)可提升 C++ 开发效率,自动生成代码或优化算法,但难以完全替代人工。例如,复杂的内存管理和性能优化仍需开发者深度参与;C++ 系统的底层逻辑和硬件依赖使得 AI 重写风险极高,尤其在需要严格实时性的场景(如航空航天控制系统);重写,即使在有AI 工具的情况下,仍然是一个巨大的消耗,企业更倾向于维护现有 C++ 系统而非重写,尤其涉及关键基础设施时;若未来 AI 自举编程技术成熟,可能催生更高效的二进制级语言,原创 2025-03-20 15:08:08 · 921 阅读 · 0 评论
分享