线程池+单例模式+STL,智能指针和线程安全+其他常见的各种锁+读者写者问题1.线程池2.线程安全的单例模式3.STL,智能指针和线程安全4.其他常见的各种锁4.读者写者问题喜欢的点赞,收藏,关注一下把!1.线程池目前我们学了挂起等待锁、条件变量、信号量、生产者消费者模型那我们就根据这些写一个线程池!线程池:一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存
目录💡基本概念💡存放内置数据类型💡存放自定义数据类型💡存放自定义数据类型指针💡vector容器嵌套容器💡vector构造函数💡vector赋值操作💡vector容量和大小💡vector插入和删除💡vector数据存取💡vector互换容器💡 基本使用💡 实际应用💡vector预留空间💡基本概念功能:vector数据结构和数组非常相似,也称为单端数组vector与普通数组区别:不同之处在于数组是静态空间,而vector可以动态扩展动态扩展:并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间💡存放内置数据类型容器: vector算法:
文章目录一、transform算法1、transform算法简介2、transform算法函数原型1-将一个输入容器中的元素变换后存储到输出容器中3、transform算法函数原型2-将两个输入容器中的元素变换后存储到输出容器中3、transform算法源码分析一、transform算法1、transform算法简介std::transform是STL标准模板库中的一个算法,该算法的作用是用于对容器或指定迭代器范围的每个元素进行指定的"转换操作",并将"转换结果"存储到另一个容器中;std::transform算法接受一个或两个输入范围,以及一个输出范围,并根据提供的一元函数对象或二元函数对象
文章目录一、transform和for_each算法的区别1、transform和for_each算法作用区别2、transform和for_each算法返回值区别3、transform和for_each算法接收的函数对象参数和返回值区别二、STL算法接收的可调用对象分析-以transform为例进行分析1、参考代码示例2、transform函数接收的规则3、查看算法函数接收的可调用对象-以transform函数为例一、transform和for_each算法的区别1、transform和for_each算法作用区别for_each算法主要用于对容器中的每个元素执行某种操作,而不一定产生新的值
文章目录一、预定义函数对象示例-将容器元素从大到小排序1、sort排序算法2、greater预定义函数对象二、代码示例-预定义函数对象1、代码示例2、执行结果一、预定义函数对象示例-将容器元素从大到小排序1、sort排序算法C++标准模板库(STL,StandardTemplateLibrary)中提供了sort算法函数,该函数定义在头文件中,是一个泛型算法;sort算法用于对容器中的元素排序,该算法效率很高,可以对给定迭代器范围内的元素进行排序,并且可以根据用户指定的比较函数来定义排序的顺序;用户指定的比较函数是一个二元谓词;std::sort算法默认排序规则的函数原型如下:template
目录一、list的简单介绍二、写出节点的代码三、模拟实现迭代器(重点)1、list中的迭代器是怎么实现的2、编写iterator类的代码3、对const_iterator进行理解4、编写const_iterator类的代码5、对iterator类和const_iterator类进行合并四、list类进行代码实现一、list的简单介绍首先我们要清楚list是一个带头双向循环的链表。二、写出节点的代码在下面代码中我们用到了模板,并且用的是struct没有用class,这是因为我们使用struct时相当于这一个类是公开的,当然我们也可以使用class但是得使用友元函数比较麻烦。 templatecl
目录💡stack💡基本概念常用接口 💡queue💡基本概念💡常用接口💡stack💡基本概念栈(stack):一种特殊的线性表,其只允许在固定的一端进行插入和删除操作。在进行数据插入和删除的一端称为栈顶,另一端称为栈低。栈中的元素都遵循后进先出的原则(LIFO,LastInFirstOut)。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。生活中栈的例子:常用接口功能描述:栈容器常用的对外接口构造函数:stackstk; //stack采用模板类实现,stack对象的默认构造形式stack(conststack&stk); //拷贝构
文章目录一、二元函数对象1、二元函数对象简介2、std::transform算法简介3、代码示例-为std::transform算法传入一元函数对象进行转换操作一、二元函数对象1、二元函数对象简介"二元函数对象"指的是一个实例类中,重载了"函数调用操作符()"函数operator(),并且该函数接受2个参数;如果"重载函数调用操作符()函数"只接收一个参数,那么这个函数对象就是一元函数对象;下面的结构体类函数对象,就是一个二元函数对象,其作用是将传入的两个int参数相加并返回;structAdd{intoperator()(inta,intb)const{returna+b;}};2、std:
STL中的容器适配器一、容器适配器1、什么是容器适配器2、STL标准库中的容器适配器二、stack的模拟实现1、stack的简单介绍2、栈的模拟实现三、queue的模拟实现1、queue的简单介绍2、queue的模拟实现四、priority_queue的模拟实现1、priority_queue的简单介绍2、priority_queue的模拟实现一、容器适配器1、什么是容器适配器适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口。例如我们常见的充电器就是一种适配器,它将我们常用的220V交流电
文章目录一、二元谓词1、二元谓词简介2、std::sort算法简介3、代码示例-为std::sort算法设置二元谓词排序规则一、二元谓词1、二元谓词简介"谓词(Predicate)"是一个返回布尔bool类型值的函数对象/仿函数或Lambda表达式/普通函数,可用于对某个条件进行检查;"谓词(Predicate)"类型:普通函数函数指针重载了函数调用操作符的函数对象/仿函数,有operator()函数;"谓词(Predicate)"通常被设计成可以接受一定数量的参数一元谓词:接受一个参数二元谓词:接受两个参数谓词的函数体中根据传入的参数进行计算,并返回true或false布尔值;"二元谓词"就