![](https://img-blog.csdnimg.cn/20210531182546292.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
c++学习笔记
文章平均质量分 70
道阻且长!
ishao97
身在井隅,心向璀璨。
展开
-
使用多线程按奇偶数交替打印0-100
#include <thread>#include <mutex>#include <condition_variable>void thread_print(){ std::mutex mtx; condition_variable c; int n = 100; bool flag = true; thread t1([&](){ int i = 0; while (i < n) { unique_lock<.原创 2021-07-28 19:20:58 · 171 阅读 · 0 评论 -
单例模式设计实现
一、饿汉模式// 保证全局(整个进程)只有唯一实例对象// 饿汉模式 : 一开始就创建对象,特点简单// 缺陷1:// 多个单例对象A B C,假设要求他们之间有依赖关系:依次创建初始化A 、 B 、 C// 饿汉模式无法保证顺序// 缺陷2:可能会导致程序启动慢class Singleton{public: Singleton& GetInstance() { return _sins; }private: Singleton() {} Singleton原创 2021-07-28 19:16:29 · 141 阅读 · 0 评论 -
C++智能指针及模拟实现
一、智能指针概念、原理及其使用(一)概念当类中有指针成员时,一般有两种方式来管理指针成员:一是采用值型的方式管理,每个类对象都保留一份指针指向的对象的拷贝;另一种更优雅的方式是使用智能指针,从而实现指针指向的对象的共享。智能指针(smart pointer)的一种通用实现技术是使用引用计数(reference count)。智能指针类将一个计数器与类指向的对象相关联,引用计数跟踪该类有多少个对象的指针指向同一对象。(二)原理1.RAII(Resource Acquisition Is Ini原创 2021-07-28 19:07:46 · 195 阅读 · 0 评论 -
c++学习笔记-----引用、类和对象概念总结
一、引用(一)概念引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。比如孙悟空的别名叫做孙猴子,但是不管是孙猴子还是孙悟空都是指的同一个人。int a=1;int& b=a;如上,b是a的别名,a是b的引用,注意这里&符号不是取地址。(二)作用1.我们经常使用引用来做输出型参数或者大对象引用传参这样可以提高效率。void swap(int& a,int& b){ int tmp=a原创 2021-02-01 19:03:37 · 437 阅读 · 0 评论 -
c++学习笔记-----this指针、构造函数、析构函数和友元函数
一、this指针**1.概念理解:**说起this指针,我个人的理解就是假如我们生产了同一种型号的两个杯子,当张三要买的时候,我们就用一个工具(this指针)给该杯子底部刻上张三的名字用来识别是张三,当李四要买,我们就给杯子刻上李四的名字,这样虽然是两个一摸一样的杯子,但是底部都有名字用来区分杯子是属于谁的。class Date{public :void Set(int year , int month , int day){_year = year;_month = month;_day原创 2021-03-11 23:11:30 · 359 阅读 · 1 评论 -
c++学习笔记-----内存管理
一、C/C++内存分布栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。堆用于程序运行时动态内存分配,堆是可以上增长的。数据段–存储全局数据和静态数据。代码段–可执行的代码/只读常量。二、C语言中malloc/calloc/realloc的区别说起他们三个区别,其实最简单理解,malloc就是向内存(堆)申请一块未初始化的空间,calloc是在申请空间后,将申原创 2021-03-12 20:40:31 · 183 阅读 · 0 评论 -
c++学习笔记-----实现一个简易string
面试中我们可能被要求编写一个简单string类函数,那我们要清楚实现一个简易string,对于共有成员我们需要构造函数、构造拷贝函数、析构函数、[ ]重载、以及赋值重载,私有成员我们只需要定义它的_str就好,这都是需要我们实现的。在这之前我们先要理解深浅拷贝这一概念,浅拷贝简单理解就是值拷贝,它是相当于s2把s1的值拷贝过去,两个类同时共用一块空间,程序结束时s1调析构函数析构s1这一空间,s2在调用析构时这一空间已经被释放过了,系统则会报错。string s1(s2);而深拷贝则是在对s1进行拷原创 2021-04-01 18:48:20 · 124 阅读 · 0 评论 -
c++学习笔记-----vector
一、vector的介绍及使用(一)什么是vector?vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。它的内部成员实际上是start、finish和endofstorage三个指针构成,起始指针为start,而finish指向最后一个数据,也就是size大小原创 2021-04-13 18:54:09 · 158 阅读 · 0 评论 -
c++学习笔记-----list
一、list的介绍及使用(一)什么是list1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2.list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、原创 2021-04-14 18:16:18 · 254 阅读 · 0 评论 -
c++学习笔记-----stack和栈
一、stack介绍及使用(一)stack介绍stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口,而stack容器适配器相当于借用deque(双端队列)的底层结构来实现stack结构。(二)stack使用template<class T, class Con =原创 2021-04-22 00:03:56 · 430 阅读 · 0 评论 -
c++学习笔记-----继承与多态
一、继承面向对象三大特性:(严格来说不止三种)最重要三种封装、继承、多态, 其他:抽象、反射(Java)。 封装本质是一种更好的管理,相比c语言面向过程,数据和方法都放到类中进行管理,在通过访问限定符进行限制。 相对C语言面向过程,数据和方法都放到类中进行管理,再通过访问限定符进行限制。(一)概念继承是为了从类设计的角度避免重复定义数据和方法,进行类角度的复用。(二)父类在子类中的访问方式在子类的访问方式=权限min(基类的访问方式,继承方式)publ...原创 2021-05-04 22:41:14 · 557 阅读 · 0 评论 -
二叉树的前中后序遍历-----非递归迭代实现 面试冲冲冲!!!
目录一、二叉树的前中后序遍历概念(一)前序遍历(二)中序遍历(三)后序遍历(四)层序遍历二、二叉树前序遍历(一)题目描述(二)思路(三)程序实现三、二叉树中序遍历(一)题目描述(二)思路(三)程序实现四、二叉树后序遍历(一)题目描述(二)思路(三)程序实现以下是整理了一晚上的二叉树三种非递归遍历方式,关于非递归遍历,有一个大的特点就是代码简单,但是难以理解。面试中常常考察我们的非递归迭代实现,而主要以后序遍历为重点!!一、.原创 2021-05-17 21:36:34 · 197 阅读 · 0 评论