随笔分类 -  c++

摘要:C++ 线程两个问题: 线程间的互斥 线程间的通信 经典例子 : 生产者与消费者线程模型 #include<iostream> #include<stdlib.h> #include<string.h> #include<string> #include<unistd.h> #include<con 阅读全文
posted @ 2020-09-02 19:54 睡觉lc 阅读(264) 评论(0) 推荐(0)
摘要:竞态条件:多线程执行结果应该是一致的,不应该因CPU 对线程的调用顺序不一样,而导致结果不一样,这也是多线程对全局量的共享,导致数据不一致,因此要保证线程的安全 例子如下: #include<iostream> #include<stdlib.h> #include<string.h> #inclu 阅读全文
posted @ 2020-09-02 17:09 睡觉lc 阅读(288) 评论(0) 推荐(0)
摘要:简单的说:线程是可被调度的最小的指令序列,线程是操作系统的一部分,不同的操作系统,对实现,和调度策略不同。 多线程的优势: 快速响应:比如在一个单线程程序中,如果主线程block在一个费时的任务中(比如I/O操作),整个程序会“冻结”住,无法响应外界的输出。通过将交互任务与这个费时的任务独立成两个线 阅读全文
posted @ 2020-09-02 14:55 睡觉lc 阅读(291) 评论(0) 推荐(0)
摘要:c++中函数对象,其实就是C中函数指针,也就是()的运算符重载函数 因此把 有operator() 重载函数的对象称作函数对象 与C语言的 函数指针相比 // C 语言函数指针的做法 // 即使写出inline 函数 但是当作为函数指针时,也无法内联 template<typename T> inl 阅读全文
posted @ 2020-09-01 19:55 睡觉lc 阅读(195) 评论(0) 推荐(0)
摘要:首先const 修饰的变量不能在作为左值,初始化之后不能在修改 在C语言中 :const int a = 20 这个a 只能叫做常变量,不能作为数组的大小开辟内存 ,并且通过指针就可以修改 (可以不初始化) const int a = 20; int *p = (int *) &a; *p = 30 阅读全文
posted @ 2020-09-01 17:36 睡觉lc 阅读(246) 评论(0) 推荐(0)
摘要:一 :new 与 malloc 的区别 malloc 是按字节开辟的,new是按类型开辟内存的 malloc 返回的void* , 而new 会返回指定类型的地址 malloc 只负责开辟内存,new 不但开辟内存,还可以初始化。 malloc 开辟内存失败返回NULL, 而new 会抛出异常 ma 阅读全文
posted @ 2020-09-01 09:36 睡觉lc 阅读(206) 评论(0) 推荐(0)
摘要:容器迭代器 : 正向普通迭代器 :::iterator 正向常迭代器 :::const_iterator 反向迭代器 :::reverse_iterator // rbegin :最后一个迭代器的表示 rend : 第一个迭代器的前驱位置 遍历 rbegin > rend 使用++ 反向常量迭代器 阅读全文
posted @ 2020-09-01 09:06 睡觉lc 阅读(160) 评论(0) 推荐(0)
摘要:无序关联容器 >链式哈希表 unordered_map 用哈希函数组织的map unordered_set 用哈希函数组织的set unordered_multimap 哈希组织的map;关键字可以重复出现 unordered_multiset 哈希组织的set;关键字可以重复出现 有序关联容器 > 阅读全文
posted @ 2020-08-31 18:26 睡觉lc 阅读(131) 评论(0) 推荐(0)
摘要:1 适配器的底层没有自己的数据结构,是另一个容器的封装,方法全部依赖底层的数据结构的方法 2 没有实现自己的迭代器 例如 stack > 底层依赖deque queue > 底层依赖deque priority_queue > 底层依赖vector 默认把数据组织成大根堆 为什么stack,queu 阅读全文
posted @ 2020-08-31 17:55 睡觉lc 阅读(148) 评论(0) 推荐(0)
摘要:deque 双端队列(另一篇博客实现过 https://www.cnblogs.com/lc-bk/p/11641498.html)动态开辟的二维数组,一维数组从2开始以2倍扩容连续,每次扩容后,原来二维的数组,从oldszie/2 开始存放,上下都预留空行,方便首位增加,二维数组之间不连续。 增加 阅读全文
posted @ 2020-08-31 17:21 睡觉lc 阅读(200) 评论(0) 推荐(0)
摘要:数据结构: vector 底层是以2倍扩容的动态数组 头文件: #include<vector> 基本操作 : 增加 push_back(val) O(1) 末尾增加 可能导致扩容 insert(it,val) O(n) 迭代器指向的位置添加元素 删除 pop_back(val) O(1) 末尾删除 阅读全文
posted @ 2020-08-31 16:58 睡觉lc 阅读(141) 评论(0) 推荐(0)
摘要:目录: 实现简单的Vector 容器面临的问题 空间适配器介绍 带有空间适配器的Vector 一 实现简单Vector #include<iostream> #include<stdlib.h> #include<string.h> #include<string> #include<unistd. 阅读全文
posted @ 2020-08-31 15:43 睡觉lc 阅读(324) 评论(0) 推荐(0)
摘要:智能指针 是一个具体的类,生成智能指针对象时,在栈上,根据栈上对象出作用域自动析构的特点,达到对资源的释放 。 智能指针的浅拷贝问题 : 不带引用计数 c++库 : auto_ptr(c++11 废弃) c11 新标准 scopet_ptr unique_ptr auto_ptr: auto_ptr 阅读全文
posted @ 2020-08-31 10:44 睡觉lc 阅读(212) 评论(0) 推荐(0)
摘要:目录 继承的本质和原理 派生类的构造过程 重载,覆盖,隐藏 静态绑定 动态绑定 多态的vfptr 和 vftable 抽象类设计原理 多重继承以及问题 虚基类 vbptr 和vbtable RTTI 一 继承的本质和原理 基类给派生类提供统一的公共属性(成员方法,成员属性),通过继承达到代码复用 基 阅读全文
posted @ 2020-08-28 15:11 睡觉lc 阅读(326) 评论(0) 推荐(0)
摘要:ElF 是什么? 可用于链接的可从定位文件,与其他目标文件生成可执行文件或者共享文件 可执行文件 目标共享文件 通俗的说 在c++或者 C 编译型语言 经过编译阶段生成可从定位的二进制文件可以说是一种ELF文件,第二种就是在Linux下可执行的文件.elf(一个或者多个.o 文件经过链接过程生成的可 阅读全文
posted @ 2020-07-27 22:03 睡觉lc 阅读(371) 评论(0) 推荐(0)
摘要:重载关系: 不能在基类和派生类相同函数名,不同参数列表谈重载,重载必须是相同作用域下的一组函数才能构成重载。 隐藏关系: 在继承关系中,派生类和基类的同名成员会被派生类隐藏,这个隐藏是指隐藏的作用域的隐藏,派生类只能调用自己的同名方法,若要调用基类同名方法要添加作用域。 派生类给基类赋值 这个是被允 阅读全文
posted @ 2020-03-04 12:29 睡觉lc 阅读(202) 评论(0) 推荐(0)
摘要:Binary Search Tree 二叉搜索树 树形数据结构在实际应用中相当广泛,尤其是二叉树,二叉树具有鲜明的特点,一个节点具有一个数据域,两个指针域,分别指向左孩子和右孩子,如下图 特点如下 若左子树不为空,则左子树上的所以值小于其根节点 若右子树不为空,则右子树上的所有值大于根节点 左右子树 阅读全文
posted @ 2020-02-23 21:14 睡觉lc 阅读(581) 评论(0) 推荐(0)
摘要:问: C++与C 语言的区别 c++ 支持带默认值的参数 参数可以从右到左给 , 可以在声明的时候给,也可以在定义的时候给 在函数调用的时候传入的参数为立即数 和有默认参数的不传参调用效率相同 ,而传入变量增加 mov 指令 如sum(10,10) 和sum(a+b); c++ 支持函数重载 ,c语 阅读全文
posted @ 2020-02-23 17:08 睡觉lc 阅读(228) 评论(0) 推荐(0)
摘要:在使用c++容器的时候其底层如何实现 例如 vector 容器 :是一个内存可以二倍扩容的向量容器,使用方便但是对内存要求严格,弊端明显 list 容器 : 双向循环链表 deque 容器 :双端队列 deque容器是C++标准模版库(STL,Standard Template Library)中的 阅读全文
posted @ 2019-10-09 14:13 睡觉lc 阅读(2878) 评论(0) 推荐(0)
摘要:队列(queue)是一种只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列是一种先进先出(First In First Out)的线性表,简称FIFO。 允许插入的一端称为队尾,允许删除的一端称为队头。 因为已经限制了插入和删除的位置,所以对于队列,插入和删除时只需要考虑满和空两种状态 阅读全文
posted @ 2019-09-23 18:20 睡觉lc 阅读(5886) 评论(0) 推荐(0)