![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++学习
整理C++的一些知识
多喝苦瓜身体好
这个作者很懒,什么都没留下…
展开
-
生产者消费者模型中条件变量的使用
目录生产者消费者模型简介条件变量condpthread_cond_wait生产者消费者模型简介生产者消费者模型中有两种角色, 一种是生产者, 一种是消费者.(这不是废话么)这个模型一般是配合多线程环境使用的生产者线程负责生产资源, 消费者线程负责使用(消费)资源. 由于资源是双方共享的临界资源, 那么在多线程的环境下就必然会涉及到线程安全的问题, 因此模型必须满足如下的要求:临界资源每次只能被一个线程访问.资源满时生产者停止生产; 资源空时消费者不得消费.为实现如上要求常需要使用条件变量(c原创 2020-05-13 16:45:55 · 351 阅读 · 0 评论 -
C++智能指针及其原理
智能指针介绍智能指针(RAII)是利用对象的生命周期来管理资源的技术。RAII,Resource Acquisition Is Initialization 顾名思义,就是在初始化对象的时候获取资源,在这个对象进行析构时会帮我们释放资源,这样做的好处有很多:不需要显示的释放资源可以避免因为没有及时释放资源而造成的内存泄漏资源的生命周期与对象相同智能指针原理下面简单的实现一个智能指...原创 2020-03-22 18:12:03 · 249 阅读 · 0 评论 -
C++异常的使用
1. 为什么C++引进了异常概念C语言中处理错误的方法有:终止程序,如assert。但是因为某个函数出错而让整个程序终止,这样用户是难以接受的返回错误码,缺陷:需要程序员自己去查找对应的错误,维护成本高C 标准库中setjmp和longjmp为了解决C语言这些不太友好的错误处理机制,C++才引入了异常,异常也是一种处理错误的方法:当一个函数遇到错误时会抛出异常,让函数的直接或间接调用...原创 2020-03-21 21:09:45 · 149 阅读 · 0 评论 -
C++多态以及实现原理
目录- 基本概念- 实现条件- 一些特殊情况- 抽象类- 原理- 建议的代码风格- 基本概念定义同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。分类动态多态:运行时多态,需要根据引用的对象确定静态多态:编译时多态,编译期就可以确定实现方法虚函数,抽象类,覆盖,模板意义可以根据需求做出不同的反应,增加了代码的通用性- 实现条件继承重写父类的虚函数函数...原创 2020-03-21 01:02:33 · 152 阅读 · 0 评论 -
如何理解C++当中的继承
目录· 继承的基础知识· 基类和派生类对象之间的交互· 作用域在继承中的运用· 派生类的默认成员函数· 继承与静态成员· 复杂的菱形继承及菱形虚拟继承· 怎样理解继承(我认为是重点)· 继承的基础知识概念继承机制是面向对象程序设计使代码可以复用的最重要的手。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。定义继承产生的新类称为派生类(子类),被继承的类称为父类...原创 2020-03-17 18:51:07 · 243 阅读 · 0 评论 -
C++入门——模板
- 模板的介绍模板是懒人的福音,是提高开发效率和降低维护成本的利器。相关概念模板分为函数模板和类模板,是泛型编程的基础。泛型编程就是编写与类无关的通用代码,使用时只需要传入实际的类型对模板进行实例化即可。简单来说,模板就是一种万能的类型,我们使用这种类型编写出来的函数就是模板函数;使用这种类型作为类成员编写的类就是模板类。在使用模板的时候需要我们传入实际的类型对模板进行填充(这个步骤...原创 2020-03-01 19:03:22 · 226 阅读 · 0 评论 -
C++入门——动态内存管理
- C/C++内存分布从上往下:内核空间栈。存储局部变量,往低地址增长。空间比较小,但是申请释放内存速度极快内存映射段。用于装载一个共享的动态内存库,用户可使用系统接口创建共享共享内存,做进程间通信。堆。动态开辟的空间,往高地址增长。空间非常大,申请释放速度较慢,且需要手动释放数据段。存储全局变量和静态变量代码段。存储函数二进制指令,常量- C语言中动态内存管理方式申请使...原创 2020-02-29 23:36:24 · 130 阅读 · 0 评论 -
C++入门——类的六个默认成员函数
1. 构造函数构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,并且在对象的生命周期内只调用一次。构造函数的主要任务并不是开空间创建对象,而是初始化对象。特征如下:函数名与类名相同无返回值对象实例化时编译器自动调用对应的构造函数构造函数可以重载如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义编译器将不再生成...原创 2020-02-27 19:34:21 · 189 阅读 · 0 评论 -
C++入门——类与对象
C语言中, 结构体就只是结构体, 在C++中, 结构体内不再是结构体, 它代表的是一个类, 它不仅可以定义变量, 也可以定义函数- 类的定义声明一个类, 需要使用class关键字或struct关键字修饰类名, 如:class className{ // 类体:由成员函数和成员变量组成};用class声明和struct声明的区别在于成员的默认访问权限不同, class的默认访问权限是...原创 2020-02-26 18:29:31 · 189 阅读 · 0 评论 -
C++和C++11的一些特性,建议初学者看看
1. 命名空间定义:namespace 空间名{ }命名空间可以嵌套定义, 如:namespace N1 { int n1; namespace N2 { int n2; }}使用时也需要嵌套, 例如: N1::n1 = 0; N1::N2::n2 = 0;编译器会将同名的命名空间合并, 这点和汇编的段类似.使用时可以使用 using name...原创 2020-02-25 22:11:21 · 2775 阅读 · 0 评论 -
组队竞赛(优化问题)
来源:牛客网组队竞赛(从这里:)牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。(到这里都可以跳过不看)例如:一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3一个队伍三个...原创 2019-11-07 00:31:43 · 905 阅读 · 0 评论