随笔分类 -  C++基础

摘要:std::function std::function 是 C++ 标准库中定义在 头文件中的一个类模板,它是一个通用的多态函数封装器,可以用来存储、复制以及调用任何可调用对象,如普通函数、Lambda 表达式、函数对象、绑定表达式等。 主要特点 通用性:能够封装各种类型的可调用对象,无论是简单的函 阅读全文
posted @ 2025-01-16 21:32 陈浩辉 阅读(377) 评论(0) 推荐(0)
摘要:#include <iostream> #include <atomic> template <typename T> class shared_ptr { private: T* ptr; std::atomic<int>* ref_count; public: // 构造函数 explicit 阅读全文
posted @ 2025-01-15 11:14 陈浩辉 阅读(44) 评论(0) 推荐(0)
摘要:一、递归的应用场景 (一)树形结构相关问题 文件系统遍历 在计算机的文件系统中,目录和文件构成了一棵树。例如,一个根目录下有多个子目录,每个子目录又可以包含更多的子目录和文件。递归可以很好地遍历这种结构。以遍历一个文件夹中的所有文件为例,算法可以先处理根目录下的文件,然后对每个子目录递归调用遍历函数 阅读全文
posted @ 2025-01-12 22:40 陈浩辉 阅读(328) 评论(0) 推荐(0)
摘要:内存泄漏(memory leak)是指由于疏忽或错误造成了程序未能释放掉不再使⽤的内存的情况。内存泄漏并⾮指内存 在物理上的消失,⽽是应⽤程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因⽽造成了内存的浪 费。可以使⽤Valgrind, mtrace进⾏内存泄漏检查。 有什么类别? (1) 阅读全文
posted @ 2024-12-15 15:28 陈浩辉 阅读(190) 评论(0) 推荐(0)
摘要:constexpr 是 C++11 引入的关键字,用于指示编译器在编译时计算常量表达式。这个关键字可以用于变量、函数和构造函数,具有以下几个主要特点和用途: 定义与用途 常量表达式:使用 constexpr 声明的变量或函数可以在编译时求值,以优化运行时性能。 适用于编译时计算:可以在编译时计算值, 阅读全文
posted @ 2024-12-13 21:54 陈浩辉 阅读(581) 评论(0) 推荐(0)
摘要:1.static关键字 static关键字可以用来修改变量和函数的生命周期、作用域和访问权限。 修饰变量,函数,成员变量,成员函数,成员局部变量。 当用来修饰变量的时候,静态变量存在于程序的整个周期内,不会因为函数运行完而消亡。 静态函数是在函数体前面加上关键字static,静态函数属于类但是不属于 阅读全文
posted @ 2024-12-13 20:50 陈浩辉 阅读(91) 评论(0) 推荐(0)
摘要:std::unique_ptr: 独特所有权模型,一个std::unique_ptr在同一时间内只允许有一个对象实例。它不允许被复制,但可以被移动。 std::shared_ptr:共享所有权模型,多个std::shared_ptr可以指向同一对象,通过引用计数机制来管理对象的生命周期。当最后一个指 阅读全文
posted @ 2024-06-16 21:03 陈浩辉 阅读(37) 评论(0) 推荐(0)
摘要:C++三大特性包括了封装、继承、多态。 封装: 封装是将数据属性和操作这些数据的函数(方法)捆绑在一起的过程。它隐藏了实现细节,只暴露出一个可以被外界访问的接口。 封装允许开发者将对象的实现细节保护起来,只提供必要的操作界面,从而减少错误和提高代码的可维护性。 继承: 继承是一种机制,允许一个类(称 阅读全文
posted @ 2024-06-16 14:21 陈浩辉 阅读(134) 评论(0) 推荐(0)
摘要:1.多态的类型 多态性有四种类型:重载多态、强制多态、参数多态和包含多态。 前两种可以统称为专用多态。 之前讲过普通函数的重载和类的成员函数的重载,它们都属于重载多态。 上面说的整型变量和浮点型变量相加时,需要先把整型变量强制转换为浮点型再进行加法运算,这就是强制多态。 从概念上讲,强制多态就是将一 阅读全文
posted @ 2024-06-10 22:16 陈浩辉 阅读(360) 评论(0) 推荐(0)
摘要:select poll epoll 三者的区别 1.select poll epoll的区别 select函数原型 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *t 阅读全文
posted @ 2024-06-03 16:55 陈浩辉 阅读(59) 评论(0) 推荐(0)
摘要:这里模拟了一个队列,5个消费者线程和5个生产者线程来共同使用队列里面的数据处理。包括了阻塞和非阻塞的出队入队方法。注意在添加线程时使用到了std::ref引用,在传参给线程时不能直接传入queue的引用,要使用std::ref才是真正意义上的引用,当直接使用queue编译器是不会通过的,因为其实直接 阅读全文
posted @ 2024-06-01 14:51 陈浩辉 阅读(121) 评论(0) 推荐(0)
摘要:Vector扩容在Linux平台下面GCC编译器扩容的大小是2倍,在VS下扩容大小是1.5倍; 选择2倍的扩容大小也是因为扩大2的时候,vector的操作可以接近到常数级别的O(1),因为空间变得很大了,基数大了相对的时间复杂度就小了。 但是扩容2倍这样的话,后面申请的空间是一定会大于之前申请的全部 阅读全文
posted @ 2024-05-31 01:53 陈浩辉 阅读(281) 评论(0) 推荐(0)
摘要:STL两级空间适配器为什么需要两级空间适配器? 因为我们如果频繁的再堆上面申请内存释放内存,就会在堆上面造成很多的外部碎片,造成空间浪费,每次都要调用malloc、free函数,降低空间利用率。 一级空间适配器: 当申请内存>128bytes的时候就用一级空间适配器。(malloc、free、realloc等方法) 二 阅读全文
posted @ 2024-05-30 17:58 陈浩辉 阅读(71) 评论(0) 推荐(0)
摘要:1、依赖倒置原则(DIP ) ·高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象稳定)。 ·抽象(稳定)不应该依赖于实现细节(变化),实现细节应该依赖于抽象(稳定)。 2、开放封闭原则( OCP ) ·对扩展开放,对更改封闭。 ·类模块应该是可扩展的,但是不可修改。 3、单一职责原 阅读全文
posted @ 2024-05-29 22:24 陈浩辉 阅读(105) 评论(0) 推荐(0)

ヾ(≧O≦)〃嗷~