
c++
文章平均质量分 90
new出对象
这个作者很懒,什么都没留下…
展开
-
const关键字不同使用场景
在类的成员函数声明后面加上 const 关键字(称该函数为常函数),表示该函数不会修改类的任何成员变量(除非这些变量被声明为 mutable)。这样的指针的值(即它所指向的地址)在初始化后不能更改,但可以通过该指针修改它所指向的值(除非该值本身也是常量)。这样的指针不能修改它所指向的值,但可以更改指针本身所指向的地址。这种指针既不能修改它所指向的值,也不能更改它所指向的地址。const 可以用于数组的声明,表示数组的内容不能被修改。缺点:不能用于定义复杂的常量表达式,只能定义简单的常量。原创 2024-03-09 19:36:40 · 563 阅读 · 1 评论 -
进程间的通信方式之【管道】
进程间的通信方式主要分为三类:管道、共享内存、消息队列;但实际上进程的通信方式可以分为六类:管道、共享内存、消息队列、信号量、信号、socket套接字编程。原创 2024-02-06 15:13:46 · 970 阅读 · 1 评论 -
智能指针介绍
四种常用智能指针介绍,auto_ptr, unique_ptr, shared_ptr, weak_ptr内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。如下例子:人为原因导致忘记释放;代码逻辑原因抛出异常使内存释放执行不了。原创 2023-12-31 20:31:40 · 1030 阅读 · 1 评论 -
条件变量--使两个线程实现交替打印
什么是条件变量?条件变量(Condition Variable)是多线程编程中用于线程间通信和同步的一种机制。它通常与互斥锁(Mutex)一起使用,用于解决线程竞争和避免忙等待的问题。(条件变量不能单独使用)条件变量解决的主要问题是当一个线程需要等待某个条件变成真时,它可以释放互斥锁,让其他线程有机会执行。当条件变成真时,线程可以重新获得互斥锁并继续执行。能提高线程的效率,避免了一些不必要的忙等待。初始化条件变量。在等待条件变为真的同时释放互斥锁,将线程挂起。用于通知等待条件变为真的线程。原创 2023-12-14 14:47:38 · 1070 阅读 · 4 评论 -
自定义日志打印功能--C++
日志是计算机程序中用于记录运行时事件和状态的重要工具。通过记录关键信息和错误情况,日志可以帮助程序开发人员和维护人员追踪程序的执行过程,排查问题和改进性能。事件信息:记录程序执行过程中的重要事件,如启动和关闭,特定操作完成等。错误信息:记录发生的错误和异常情况,包括错误类型、位置和可能的原因。警告信息:记录潜在问题或需要注意的情况,但不是严重到导致程序崩溃的程度。调试信息:记录用于调试程序的详细信息,方便追踪程序状态和流程。日志的记录一般包括时间戳、事件类型、事件描述等信息。原创 2023-12-12 22:18:26 · 1895 阅读 · 0 评论 -
C++11特性详解
在了解右值引用前,需要先知道什么是左值引用?左值是一个表示数据的表达式(如变量名或解引用的指针),我们可以获取它的地址+可以对它赋值,左值可以出现赋值符号的左边,右值不能出现在赋值符号左边。定义时const修饰符后的左值,不能给他赋值,但是可以取它的地址。左值引用就是给左值的引用,给左值取别名。左值引用的语法:&比如:// 以下的p、b、c、*p都是左值int b = 1;// 以下几个是对上面左值的左值引用。原创 2023-08-24 18:28:50 · 874 阅读 · 7 评论 -
红黑树深入剖析【C++】
红黑树的概念,插入操作的详解,插入的源码1.红黑树插入的节点一定为红色2.处理三种可能的情况关键在于叔叔节点u3.u存在且为红(情况一),将p和u节点变黑,g节点变红,若g为根节点就将g变为黑色4.情况二和情况三都是由情况一经过变化后得来的4.u不存在或存在且为黑,插入的节点cur在p的外侧(情况二),若p是左子树就进行右旋+交换p、g颜色;若p是右子树,反之,左旋+交换颜色。5.u不存在或存在且为黑,插入节点cur在p的内侧(情况三),若p是左子树就先进行左旋变为情况二,再进行右旋+交换颜色。原创 2023-07-28 15:36:57 · 493 阅读 · 7 评论 -
平衡二叉搜索树--AVL详解剖析
平衡二叉搜索树--AVL树关于概念、作用、源码实现等操作。以及对左旋、右旋、左右旋、右左旋的代码讲解和图画讲解原创 2023-07-16 16:03:56 · 856 阅读 · 9 评论 -
map和set介绍及使用
在了解map、set之前,你肯定已经使用过vector、list、deque、forward_list(C++11)等这些容器,而他们统称为序列式容器,因为其底层为线性序列的数据结构,里面存储的是元素本身。而关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是结构的键值对,在数据检索时比序列式容器的效率更高。键值对:用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key对应的信息。原创 2023-07-10 17:35:58 · 1038 阅读 · 7 评论 -
list的使用介绍---C++
c++ STL中list的使用 各种方法接口 构造 迭代器失效问题原创 2023-05-01 14:00:09 · 1050 阅读 · 0 评论 -
容器适配器---deque和STL ---stack queue priority_queue的模拟实现 C++
适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配器,这是因为stack和queue只是对其他容器的接口进行了包装,STL中stack和queue默认使用deque。原创 2023-05-02 10:09:36 · 770 阅读 · 0 评论 -
stack、queue和priority_queue的使用介绍--C++
C++的STL stack、queue和priority_queue的使用介绍优先级队列 栈和队列 模拟实现原创 2023-05-02 10:10:27 · 1048 阅读 · 0 评论 -
vector迭代器失效问题
迭代器的主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针或者是对指针进行了封装,比如:vector的迭代器就是原生态指针T*。因此迭代器失效,实际就是迭代器底层对应指针所指向的空间被销毁了,而使用一块已经被释放的空间,造成的后果是程序崩溃(即如果继续使用已经失效的迭代器,程序可能会崩溃)。原创 2023-02-23 16:16:06 · 750 阅读 · 12 评论 -
vector的使用介绍
1. vector是表示可变大小数组的序列容器。2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。3. 本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。vector的基本使用reverse与resize的比较原创 2023-02-23 14:55:44 · 1280 阅读 · 5 评论 -
C++类和对象(基础)
c++类和对象基础原创 2022-09-12 22:17:38 · 364 阅读 · 0 评论 -
C++ new delete 的使用(初阶)
new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间外还会调用构造函数和析构函在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与free不会。operator new operator delete 常见一些内存问题:内存泄漏、内存泄漏种类、malloc new的区别c++ 中new和delete原创 2022-12-17 11:44:47 · 194 阅读 · 9 评论