笔记
sky@dk
这个作者很懒,什么都没留下…
展开
-
C++11之Lambda表达式学习
C++11中的Lambda表达式用于定义并创建匿名的函数对象。Lambda表达式的基本构成:最简单的lambda表达式如下[](参数1,参数2){ 函数实现的代码}Lambda表达式是从[]开始的,这部分必须存在,不能省略,[]里面可以带参数,参数有=,&,this(1)参数=表示数体内可以使用Lambda所在作用范围内所有可见的局部变量(包括Lambda所在类的t...原创 2020-03-31 20:58:29 · 117 阅读 · 0 评论 -
C++智能指针weak_ptr的学习笔记
weak_ptr 智能指针是为了解决shared_ptr相互引用导致的死锁问题,它不控制对象的生命周期,不会增加对象的引用次数,和shared_ptr可以相互转化,是一种弱应用。下面的代码就陷入了死锁,p1和p2相互引用导致计数一直为1,而对象得不到销毁。#include<iostream>#include<memory>using namespace std;...原创 2020-03-24 20:39:19 · 452 阅读 · 0 评论 -
C++智能指针shared_ptr学习笔记
C++智能指针shared_ptr实现的是,多个指针指向相同的对象,其释放的时机是最后一个引用被销毁时,当use_count()为0时被彻底释放。我们可以调用release()释放资源所有权,计数减一。shared_ptr容易引起死锁。避免使用raw pointer#include<iostream>#include<memory>using namespa...原创 2020-03-24 20:14:29 · 164 阅读 · 0 评论 -
C++智能指针unique_ptr学习笔记
C++11特性里面引入了很多智能指针,其中就包括unique_ptr,智能指针的作用是管理一个指针以防止指针忘记释放而造成内存泄露。unique_ptr是一个类,当超出了类的作用域,类会自动调用析构函数,析构函数会自动释放资源。其原理就是在函数结束时自动释放内存空间。unique_ptr的头文件为memory#include<iostream>#include<mem...原创 2020-03-24 17:37:09 · 268 阅读 · 0 评论 -
进程和线程通信同步方式总结
进程同步方式:临界区,互斥量,信号量,事件。线程同步方式:信号量,互斥量,条件变量。进程通信方式:管道(普通管道和命名管道),消息队列,信号量,信号,共享内存,套接字。线程通信方式:临界区,互斥量,信号量,事件。...原创 2020-03-21 18:53:16 · 260 阅读 · 0 评论 -
关于虚函数的一些理解
虚函数的作用虚函数的作用主要是为了实现程序的动态多态性虚函数的声明情况1:只能在类中用virtual声明虚函数。2:有继承情况的基类中析构函数必须是虚函数3:一个成员函数被声明为虚函数后,在同一类族中的类就不能再定义一个非virtual的但与该虚函数具有相同的参数(包括个数和类型)和函数返回值类型的同名函数。...原创 2020-03-20 15:41:41 · 187 阅读 · 0 评论 -
C++中sizeof和strlen的用法误区
sizeof函数是求表达式或者类型的字节数的,strlen是求字符串的长度的。sizeof遇到’\0’会把它的长度算进去,而strlen不会把’\0’算进去,而是到‘\0’就停止计算。例如#include<iostream>#include<cstring>#include<string>using namespace std;int main...原创 2020-03-18 20:47:01 · 850 阅读 · 0 评论 -
C++求二叉树深度的两种方法
今天在leetcode中碰到了求二叉树的深度问题,于是总结一下这两种方法方法一是用递归的方法,方法二是借助队列和层序遍历的思想#include<iostream>#include<queue>using namespace std;//构建二叉树struct TreeNode{ int val; struct TreeNode *left;...原创 2020-03-17 20:44:07 · 5940 阅读 · 0 评论 -
关于C++观察者模型的学习和理解
观察者模式属于行为型模式中的一种,其作用是当一个对象的状态发生改变时,能够通知其他关联对象,自动刷新对象的状态,有点像马路上的车和红绿灯的关系,当红灯这个对象亮起的时候,小车应该是停下来的状态,在小灯变绿的时候,小车才是行驶的状态。小车里面的人监听灯的变化情况。2.Talk is cheap(具体实现代码如下)#include <iostream>#include <v...原创 2020-03-16 18:55:39 · 195 阅读 · 0 评论 -
关于C++单例模式(饿汉式和懒汉式)学习的一些理解
1. 单例模式从字面意思就可以看出来单例模式是一个类只能创建一个实例对象,这种创建对象的方法带来的好处就是多线程开发中,初始化一次套接字,共享同一个资源,节省创建对象的时间,有些场景模式下,要求一个类只生成一个唯一的对象。单例模式又分为饿汉式和懒汉式单例模式。它的基本实现步骤是(1)先把构造函数私有化(2)提供一个全局的静态方法(创建对象用)(3)在类中定义一个静态指针,指向本类的变量的...原创 2020-03-14 10:36:20 · 187 阅读 · 0 评论 -
关于C++创建抽象工厂方法模式的学习笔记
1. 抽象工厂方法模式与工厂方法模式的区别工厂方法模式是在简单工厂方法基础之上再加上开闭原则形成的一种设计模式,其创建对象时不用new创建对象,而是使用工厂来创建,我们只需要提供一个接口就能实现创建,但是工厂模式在创建对象时候太过于单一,它要么生产香蕉,要么生产鸭梨,但是不能做到同时生产这两种,也就是说不能生产一个产品组。而抽象工厂方法模式能够同时生产一个产品族。2.抽象工厂方法实现中国工厂...原创 2020-03-13 11:07:30 · 192 阅读 · 0 评论 -
关于C++实现工厂方法模式的实现与理解
1. 工厂模式按照我自己的理解就是一个工厂生产某一个产品的模式或者模板,它生产出来的产品都是一样的,比如说我想要一台电脑,我直接去工厂提货就行了,而我不用管这个电脑是如何生产出来的,也不需要管它的具体实现步骤。在面向对象编程的过程中,设计模式主要分为三大类分别是创建型模式,结构式模式,行为型模式,而工厂模式属于创建型模式,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来...原创 2020-03-12 19:12:59 · 186 阅读 · 0 评论 -
C++数据结构单链表学习过程中遇到的问题
1头结点与头指针的关系1.1链表的定义:由一堆包含两个部分的结点链接而成的数据结构,两个部分分别存储的是当前结点地址信息的指针域和存储数据元素的数据域。1.2头指针定义:通常使用“头指针”来标识一个链表,如单链表L,头指针为NULL的时表示一个空链表。1.3头结点定义:在单链表的第一个结点之前附加一个结点,称为头结点。头结点的Data域可以不设任何信息,也可以记录表长等相关信息。1.4两者...原创 2020-03-09 19:24:09 · 972 阅读 · 1 评论