- 博客(149)
- 收藏
- 关注
原创 C++11详解
C++11文章目录C++11C++11简介列表初始化C++98中{}的初始化问题C++11内置类型的列表初始化自定义类型的列表初始化STL当中的列表初始化变量类型推导autodecltypeSTL当中的变化arrayforward_listunordered_map和unordered_set右值引用和移动语义左值和右值左值引用和右值引用右值引用的场景移动语义移动赋值完美转发默认成员函数可变参数模板emplace_back和push_back的区别lambda表达式lambda表达式语法包装器bindth
2022-05-26 19:44:30
1043
1
原创 C++之特殊类的设计(单例模式)
特殊类的设计(单例模式)文章目录特殊类的设计(单例模式)请设计一个类,只能在堆上创建对象方法一方法二请设计一个类,只能在栈上创建对象方法一方法二请设计一个类,不能被拷贝C++98C++11请设计一个类,不能被继承请设计一个类,只能创建一个对象(单例模式)设计模式单例模式单例模式的实现饿汉模式懒汉模式请设计一个类,只能在堆上创建对象方法一正常情况下我们既可能在栈上有可能在堆上创建对象,现在要求只能在堆上创建对象,我们可以将析构函数设置成私有,当在栈上创建对象后,最后释放对象时会报错,因为析构函数是私有
2022-04-20 21:27:49
1122
1
原创 Linux信号量
POSIX信号量文章目录POSIX信号量信号量相关接口初始化信号量销毁信号量等待信号量发布信号量基于环形队列的生产消费模型POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。 但POSIX可以用于线程间同步。那么信号量是什么?先举个现实生活中的例子:看电影时我们要买票,我们买完票觉得那个座位就属于我们的,现实生活中,有很多场景是有"预定"机制,通过预定可以保证一人一座,电影院的售票系统卖出去的票不能超过电影院的承受能力信号量(信号灯),本质是一个计数器
2022-04-06 22:48:28
659
原创 生产者消费者模型详解
生产者消费者模型文章目录生产者消费者模型什么是生产者消费者模型基于BlockingQueue的生产者消费者模型单生产者单消费者模型多生产者多消费者模型什么是生产者消费者模型生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者
2022-04-06 12:47:34
9408
原创 线程同步与互斥详解
线程同步与互斥文章目录线程同步与互斥线程互斥进程线程间的互斥相关背景概念互斥量的接口互斥量实现原理可重入和线程安全常见的线程不安全的情况常见的线程安全情况常见锁概念死锁死锁四个必要条件避免死锁避免死锁算法线程同步什么是同步条件变量条件变量初始化函数条件变量销毁等待条件满足唤醒等待线程互斥进程线程间的互斥相关背景概念临界资源:多线程执行流共享的资源就叫做临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源
2022-04-05 15:49:07
1347
原创 Linux线程基础详解
Linux线程文章目录Linux线程Linux线程概念什么是线程Linux线程和其他平台的线程线程的优点线程的缺点异常进程和线程的区别pthread线程库pthread_create线程终止pthread_selfpthread_exit线程终止pthread_cancel线程等待线程分离pthread_detachLinux线程概念什么是线程在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行,
2022-04-05 12:24:42
1536
原创 unordered_set和unordered_map模拟实现
unordered_set和unordered_map模拟实现文章目录unordered_set和unordered_map模拟实现KV模型的哈希表代码哈希表的改造模板参数的改造哈希表节点结构哈希表迭代器模拟实现operator++模拟实现operator*的模拟实现operator->的模拟实现operator==和operator!=的模拟实现迭代器的整体实现哈希表的最终代码unordered_set的模拟实现unordered_map的模拟实现KV模型的哈希表代码namespace buc
2022-03-31 22:57:46
392
原创 Linux之信号详解
进程信号文章目录进程信号信号入门生活角度的信号技术应用角度的信号信号概念用kill -l命令可以查看系统定义的信号列表信号产生键盘产生kill命令产生调用系统函数向进程发信号abortraisekillkill命令的命令行输入模拟实现由软件条件产生信号alarm硬件异常产生信号检测core dump标志位总结信号识别信号的处理自定义方式捕捉信号阻塞信号信号其他相关概念在内核中的表示sigset_t信号集信号集操作函数sigprocmasksigpending信号的捕捉内核如何实现信号的捕捉整个信号捕捉的过
2022-03-31 22:52:02
1772
1
原创 C++之unordered_map和unordered_set以及哈希详解
unordered_map和unordered_set的使用文章目录unordered_map和unordered_set的使用unordered_map的文档unordered_set和unordered_map的两个OJ题两个数组的交集两个数组的交集二set和undered_set的性能比较哈希哈希概念哈希冲突常见哈希函数哈希冲突的解决闭散列开散列闭散列的实现数据的存储结构哈希表的结构哈希表的插入哈希表的查找哈希表的删除哈希表闭散列的代码哈希表闭散列的完整代码开散列的实现开散列概念数据的存储结构哈希表
2022-03-30 22:57:28
2541
原创 Linux下的动态库和静态库详解
动态库和静态库文章目录动态库和静态库静态库与动态库的概念理解动静态库如何打包动静态库与如何使用动静态库如何制作打包动态库为什么我们要使用别人(一般是顶尖的工程师写的)的代码?为了开发效率和鲁棒性(健壮性)如何使用别人的功能?1、库 2、开源代码 3、基本的网络功能调用(各自网络接口,语音识别)库一般分为动态库和静态库,动态库一般的命名为libc.so,静态库一般的命名为libc.a,去掉前缀lib,去掉.之后的内容,剩下的就是库的名字,这里就是c库,生成可执行程序的方式有两种:动态链接和
2022-03-21 21:39:17
2413
原创 C++之STLmap和set的模拟实现
模拟实现map和set文章目录模拟实现map和set源码中红黑树的结构模板参数中的仿函数红黑树的迭代器的模拟实现迭代器的基本结构红黑树的迭代器的整体代码map的模拟实现set的模拟实现我们首先来看一下源码当中的set和map的结构:template <class Key,class Compare = less<Key>, class Alloc = alloc>class set {public: typedef Key key_type; typedef
2022-03-21 21:31:29
1122
原创 数据结构之红黑树
红黑树文章目录红黑树红黑树的概念红黑树的性质红黑树节点的定义红黑树的插入情况操作红黑树的插入代码红黑树测试代码红黑树整体代码本篇博文只讲解了红黑树的插入操作,下面我们来了解一下什么是红黑树。红黑树的概念红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。NIL是空结点,这里显示出来是为了表示路径红黑树和AVLTree不同点:
2022-03-18 16:05:24
618
原创 C++STL之map和set的使用
map和set文章目录map和setsetset的使用set的插入set的遍历set的find接口set的erase接口map的介绍键值对mapmap的使用map的模板参数map的插入简单英文翻译字典统计字符串个数operator[]的使用erase的使用map和multimap的对比在OJ中的使用前k个高频单词题目描述错误代码写法正确代码写法setset的使用set的插入#include<iostream>#include<set>using namespace s
2022-03-12 19:47:34
1331
1
原创 笔试强训每日一题(十三)
笔试强训每日一题(十三)文章目录笔试强训每日一题(十三)最近公共祖先题目链接题目描述测试样例题目思路题目代码求最大连续bit数题目描述题目解析题目代码最近公共祖先题目链接题目描述将一棵无穷大满二叉树的结点按根结点一层一层地从左往右编号,根结点编号为1。现给定a,b为两个结点。设计一个算法,返回a、b最近的公共祖先的编号。注意其祖先也可能是结点本身。测试样例2,3返回:1题目思路两个数进行比较,较大的找到父节点,和较小的比较,如果相等则是公共祖先,如果不相等,使用较大值的父节点与另
2022-03-12 16:12:36
1350
原创 笔试强训每日一题(十二)
笔试强训每日一题(十二)文章目录笔试强训每日一题(十二)另类加法题目链接题目描述测试样例解题思路走方格的方案数题目链接题目描述输入描述输出描述解题思路解题代码递归解题代码另类加法题目链接题目描述给定两个int A和B。编写一个函数返回A+B的值,但不得使用+或其他算数运算符。测试样例1,2返回:3解题思路不使用算数运算符,故需要通过位运算计算:两个数字相加:1、求取数字相加后当前二进制位的取值(不考虑进位)2、求取数字相加后进位的数值比如:1+3二进制:00000001
2022-03-10 15:22:38
174
原创 Linux之文件基础IO详解
基础IO文章目录基础IOstdin & stdout &stderror系统文件I/Oopenclosereadwriteopen函数返回值文件描述符fd文件描述符的分配规则重定向使用dup2系统调用理解文件系统磁盘上的文件系统,认识磁盘软硬链接硬链接数文件的时间属性首先我们先理解以下文件的几个基础知识:文件的宏观理解:文件是在硬盘上存储的,对文件的所有的操作,都是对外设的输入输出,简称IO磁盘上的空文件,占不占用磁盘空间呢?我们看到新建文件的属性上写的大小和占用空间是0字
2022-03-10 12:45:52
463
原创 笔试强训每日一题(十一)
笔试强训每日一题(十一)文章目录笔试强训每日一题(十一)递归乘法题目链接题目描述题目思路题目代码挑7题目链接题目描述输入描述输出描述题目解析题目代码递归乘法题目链接题目描述递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。示例1:输入:A = 1, B = 10输出:10示例2:输入:A = 3, B = 4输出:12题目思路A,B两数相乘,就是把第A数字相加B次,以大事化小的思想:A数字相加B次相当于A+
2022-03-05 19:06:22
438
原创 数据结构之二叉搜索树详解
二叉搜索树文章目录二叉搜索树二叉搜索树概念二叉搜索树的操作二叉搜索树的节点结构二叉搜索树的结构二叉搜索树的查找二叉搜索树的插入二叉搜索树的遍历二叉搜索树的删除二叉搜索树插入的递归写法二叉搜索树查找的递归写法二叉搜索树删除的递归写法二叉搜索树增删查改操作代码二叉搜索树的应用Key搜索场景KV搜索场景(key-value)二叉搜索树概念二叉搜索树的操作二叉搜索树的节点结构二叉搜索树的结构二叉搜索树的查找二叉搜索树的插入二叉搜索树的遍历二叉搜索树的删除二叉搜索树插入的递归写法二叉搜索树查找的递归写法二叉搜索树删
2022-03-05 19:01:50
809
原创 笔试强训每日一题(十)
笔试强训每日一题(十)文章目录笔试强训每日一题(十)Fibonacci数列题目链接题目描述输入描述输出描述题目思路解题代码合法括号序列判断题目链接题目描述测试样例题目思路:解题代码Fibonacci数列题目链接题目描述Fibonacci数列是这样定义的:F[0] = 0F[1] = 1for each i ≥ 2: F[i] = F[i-1] + F[i-2]因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在Fibonacci数列中的数我们称为F
2022-03-04 14:44:45
171
原创 Linux之进程控制详解
进程控制文章目录进程控制进程创建fork函数初识fork函数返回值写时拷贝fork常规用法fork调用失败的原因进程终止进程退出场景进程常见退出方法main函数返回exit_exit进程等待进程等待的方法wait方法waitpid方法进程程序替换替换原理替换函数命名理解execlexecvexecvpexeclpelecleshell小程序的简单实现进程创建进程创建的最常见的两种场景:1、命令行启动命令(程序、指令等)2、通过程序自身fork出来子进程fork函数初识在linux中fork函数
2022-02-09 13:28:37
1251
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人