C++
文章平均质量分 95
C++下等马
这个作者很懒,什么都没留下…
展开
-
C++ 类和对象(3)
在之前的文章中介绍过C++中的关于构造函数并没有完全介绍完 这篇文章继续研究c++的构造函数简单回顾一下之前介绍过构造函数的特征。原创 2024-04-18 14:11:31 · 322 阅读 · 0 评论 -
C++ 类和对象(2)
本次内容大纲。原创 2024-04-18 14:10:49 · 377 阅读 · 0 评论 -
结构体内存对齐
vs系列的编译器默认对齐数是8,不是所有编译器都有默认对齐数,当编译器没有默认对齐数的时候,成员变量的大小就是该成员的对齐数。比如上面结构体S,在vs编译器下,默认对齐数是8。在整个结构体对象内存中。d是第一个成员,对齐到结构体对象的首地址即可。c要对齐到1的整数倍,i要对齐到4的整数倍。图解:d从起始地址占8个字节即可,c对齐1的整数倍,占1个字节即可。i要对齐到4的整数倍,占4个字节。然后确定整个结构体对象的总大小。最大对齐数的整数倍,也就是8的整数倍。原创 2024-04-18 14:09:30 · 297 阅读 · 0 评论 -
高并发内存池【tcmalloc】
是在计算机技术中经常使用的一种设计模式,其内涵在于:将程序中需要经常使用的核心资源 先申请出来,放到一个池内,由程序自己管理,这样可以提高资源的使用效率,也可以保证本程 序占有的资源数量。经常使用的池技术包括内存池、线程池和连接池等,其中尤以内存池和线程 池使用最多。内存池内存池(Memory Pool) 是一种动态内存分配与管理技术。通常情况下,开发者习惯直接使 用newdeletemallocfree。内存池则是在真正使用内存之前,,再次申请池可以再取出来使用,并尽量与周边的空闲内存块合并。原创 2024-04-12 20:22:31 · 912 阅读 · 0 评论 -
并发编程模型-生产者消费者模型
生产者消费者模型是一种并发编程模型,用于解决多线程或多进程间的数据共享和同步问题。在这个模型中,有两种角色:生产者和消费者,它们通过共享的缓冲区进行通信。生产者负责生成数据并将其放入缓冲区,而消费者则从缓冲区中获取数据并进行处理。生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而共享的缓冲区进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给缓冲区,消费者不找生产者 要数据,而是直接从缓冲区取,平衡了生产者和消费者的处理能力。原创 2024-04-07 16:35:42 · 329 阅读 · 0 评论 -
C++智能指针
智能指针是一种用于管理动态分配内存的对象,可以在内存不再需要时自动释放。智能指针通过重载了指针操作符的类来实现,以模拟指针的行为,但具有自动资源管理的功能。原创 2024-04-07 11:43:56 · 416 阅读 · 0 评论 -
单例模式
将该类的构造函数设置为私有即可,因为子类对象构造时,必须先调用父类构造,构造父类那一部分成员。单例模式指的就是一个类只能创建一个对象,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。单例对象创建后一般在整个程序运行期间都可能会使用,所以我们可以不考虑单例对象的释放,程序正常结束时会自动将资源归还给操作系统。因此,将单例实例保存在静态成员变量中能够满足单例模式的要求,确保了实例的全局可访问性和唯一性。释放操作只能调用一次,单检查加锁足够了,无需双检查加锁。原创 2024-03-24 16:55:41 · 891 阅读 · 0 评论 -
C++ STL -->模拟实现string
模拟实现的目的就是为了更好的使用STL默认成员函数构造函数无参构造函数:构造空字符串 空字符串里面是有一个\0的 并不是什么都没有带参构造函数函数声明:注意 这里缺省值只能给函数声明,定义的时候不能再使用缺省值实现:析构函数这里的构造函数用new从堆区申请空间,所以析构函数需要自己实现去主动释放资源,编译器默认生成的无法满足需求拷贝构造函数这里如果使用编译器默认生成的拷贝构造函数去初始化对象 在对象生命周期结束时 c++编译器自动调用析构函数会出错 如下图原因:这里是浅拷贝 s1和原创 2024-03-01 08:31:54 · 271 阅读 · 0 评论 -
C++11右值引用
左值引用左值引用只能引用左值,不能引用右值const左值既可以引用左值,也可以引用右值右值引用右值引用只能引用右值,不能引用左值但是右值引用可以move以后的左值。原创 2024-02-23 17:02:59 · 943 阅读 · 1 评论 -
C++ STL->用一棵红黑树封装出map和set
关于map和set的介绍和红黑树,之前博客都有介绍。这篇文章要用一棵红黑树同时封装出set和map,主要利用泛型编程的思想来完成。之前博客实现的红黑树是K,V模型的,而set是K模型,map是K,V模型。(K模型和KV模型,是二叉搜索树的两个主要应用的两个大模型。要用同一棵红黑树来封装map和set,使用模板参数来确定树中存放的是K还是KV模型。对之前的红黑树进行修改如下:(删除了验证红黑树相关成员函数,添加了析构和查找函数)原创 2024-02-16 13:27:22 · 770 阅读 · 0 评论 -
C++ STL->list模拟实现
list。原创 2024-02-16 13:24:16 · 1219 阅读 · 0 评论 -
C++ STL map和set的使用
set文档set是按照一定次序存储元素的容器在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行 排序。set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对 子集进行直接迭代。set在底层是用二叉搜索树(红黑树)实现的。原创 2024-01-30 10:49:44 · 47 阅读 · 0 评论 -
C++ STL ->priority_queue(优先级队列)
优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元 素)优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特 定的成员函数来访问其元素。元素从特定容器的“尾部”弹出,其称为优先队列的顶部。底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。标准容器类vector和deque满足这些需求。原创 2024-01-17 17:42:27 · 357 阅读 · 0 评论 -
C++ STL--->stack和queue
栈就是一种特殊的vector ,使用vector实现栈的后进先出的特点即可。使用不同得底层容器 实现不同物理结构得队列。原创 2024-01-16 11:20:43 · 824 阅读 · 0 评论 -
C++ 多态以及多态的原理
C++对函数重写的要求比较严格,有些情况可能由于疏忽,导致无法构成重写,这种情况编译器不会报错,程序会正常运行,但是得到的结果不是正确的,所以C++11引入了final和override关键字final 修饰虚函数,表示该虚函数不能再被重写override 检查派生类是否重写了基类虚函数。如果没重写,编译器会报错。public:public:virtual void Func() override//error 派生类没有正确重写基类Func函数 编译器会报错,少了const修饰。原创 2024-01-10 21:29:53 · 1034 阅读 · 0 评论 -
C++继承
public继承是最常见的形式,它使得基类的公共成员在派生类中保持为公共成员,基类的受保护成员在派生类中保持为受保护成员。派生类对象可以访问基类的公共成员。public:protected:private:// _publicMember 在 Derived 中仍然是公共的// _protectedMember 在 Derived 中仍然是受保护的// _privateMember 对于 Derived 是不可见的不可访的。原创 2024-01-02 17:49:05 · 367 阅读 · 0 评论 -
C++ STL -->模拟实现vector
拷贝数据对于内置类型和自定义类型的。原创 2023-12-15 15:54:08 · 392 阅读 · 0 评论 -
C++ STL -->string类
STL全称standard template libaray-标准模板库 是C++标准库的重要组成部分 不仅是一个可复用的组件库 更是一个保罗数据结构与算法的软件框架STL是C++中的优秀的作品 有了它 许多底层数据结构以及算法都不需要自己重新造轮子 直接站在巨人的肩膀上 健步如飞快速进行开发。原创 2023-11-20 20:08:30 · 291 阅读 · 3 评论 -
C++模板
class 类模板名//...比如实现一个栈//类模板public:,_top(0)~Stack();//类外定义private:T* _a;int _top;//类模板中函数放在类外面进行定义 需要加模板参数列表。原创 2023-11-15 22:30:52 · 92 阅读 · 1 评论 -
C/C++内存管理
new/delete 和 malloc/free 最大的区别是 new/delete对于自定义类型而言 不仅开了空间 还会调用构造函数和析构函数不会去调用构造函数和析构函数 仅仅只为变量开空间和释放空间new/deletenew 会先开空间 然后调用构造函数delete会先调用析构函数 然后释放空间注意:这里的Date(2023) 不是匿名对象 是new 操作符指定的类型(Date)和初始化的值(2023)new 的原理调用operator new函数申请空间。原创 2023-11-14 11:11:07 · 154 阅读 · 1 评论 -
C++ 类和对象(1)
class 为定义类的关键字//... };Test 为类的名字(自定义)类中的元素称为类的成员类中的变量称为类的属性或者成员变量类中的函数称为类的函数或者类的方法1.类的定义和声明全部方在类体中。//test.cpp文件class Test//实现...char _name;int _id;int _age;2.声明放在头文件中、定义放在源文件中//test.h文件//声明class Testchar _name;int _id;int _age;原创 2023-10-20 14:05:23 · 179 阅读 · 5 评论 -
C++入门
c语言是结构化和模块化语言,不适合解决复杂问题。20世纪80年代,为了解决软件危机 计算机界提出了OOP面向对象思想。C++是一种面向对象的编程语言,祖师爷Bjarne Stroustrup本贾尼在20世纪80年代开发出这门语言,因为C++是基于C语言而产生的,从而命名为C++也叫cpp。c++支持大部分c的语法, 所以c++既可以进行c语言得过程化程序设计,又可以进行面向对象的程序设计。在学习c++之前 ,应该对c语言有很好的掌握。定 义命名空间,需要使用到namespace关键字。原创 2023-10-12 15:20:25 · 165 阅读 · 15 评论