c++和数据结构
文章平均质量分 78
雨幕丶
这个作者很懒,什么都没留下…
展开
-
多线程c++
1. join会阻塞当前的线程,直到运行的线程结束。(例如上面第二段代码主线程被阻塞,直到子线程执行完才会执行join之后的主线程代码)2.detach从线程对象中分离出执行线程,允许线程独立的执行。(上面第三段代码,主线程和两个子线程独立的执行)原创 2024-01-30 17:20:23 · 1191 阅读 · 0 评论 -
STL--关联式容器底层实现
unordered_set、unordered_map、unordered_multiset和unordered_multimap。结合数组查找数据快和链表插入删除效率高优点得到一个寻址容易,插⼊删除也容易的数据结构。查找、增删数据时间复杂度(O(1))红黑树的查找,插入和删除操作,时间复杂度都是O(logn)。红⿊树的每个节点上都有存储位表示节点的颜⾊,可以是红或⿊。:set、map、multiset和multimap ②。原创 2023-12-12 16:56:05 · 431 阅读 · 0 评论 -
多线程、智能指针以及工厂模式
weak_ptr 可以使用一个非常重要的成员函数lock(),从被观测的 shared_ptr 获得一个可用的 shared_ptr 管理的对象, 从而操作资源。weak_ptr 被设计为与 shared_ptr 共同工作,可以从一个 shared_ptr 或者另一个 weak_ptr 对象构造而来。:某厂有两个加工厂A和B分别生产鞋和衣服,随着订单的增加,A厂所在地有了衣服的订单,B厂所在地有了鞋子的订单,再开新的工厂显然是不现实的,因此在原来的工厂增加生产需求的功能,即A生产鞋+衣服,B生产衣服+鞋。原创 2023-04-24 22:05:30 · 549 阅读 · 1 评论 -
c++面试总结(二)
为什么使用智能指针智能指针其作⽤是管理⼀个指针,避免申请的空间在函数结束时忘记释放,造成内存泄漏。使⽤智能指针可以很⼤程度上的避免这个问题,因为智能指针就是⼀个类,当超出了类的作⽤域类会⾃动调⽤析构函数,从而⾃动释放资源。当需要独占资源的所有权的时候(即保证同一时间内只有一个智能指针可以指向该对象),可以使用 unique_ptr 对资源进行管理——离开 unique_ptr 对象的作用域时,会自动释放资源。两个unique_ptr 不能指向一个对象,即 unique_ptr 不共享它所管理的对象。原创 2023-02-17 17:26:55 · 666 阅读 · 0 评论 -
leetcode--二叉树
写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。前序遍历是中左右,因此我们可以得到中右左顺序的遍历方法,然后将中右左反转(reverse),得到左右中。,先将根节点入栈,然后栈顶元素出栈,右节点入栈,左节点入栈。原创 2022-12-08 10:54:37 · 271 阅读 · 0 评论 -
c++面试总结
线程是CPU使用的基本单元,线程有四种状态:新生状态、可运行状态、被阻塞状态、死亡状态。原创 2022-09-19 11:25:12 · 547 阅读 · 0 评论 -
leetcode--字符串
KMP算法:解决字符串匹配问题前缀:包含首字母不包含尾字母的子串 344 反转字符串541 每隔2k个字符反转前k个字符58 左旋转字符串28 实现strStrkmp算法原创 2022-06-21 21:49:13 · 174 阅读 · 0 评论 -
leetcode--链表
链表:单链表、双链表、循环链表。链表和数组区别:203 移除链表元素c++使用链表删除元素后要delete该元素的内存空间方法一:如果头节点是需要删除的元素,需要将head = head->next方法二: 设置一个虚拟头节点(需要初始化),让这个虚拟头节点的next = head,最后记得让head = 虚拟头节点的next,然后删除虚拟头节点707 设计链表对于数组遍历只需要知道它的长度,对于链表长度未知,只能一个一个节点去找,直到某个节点的next = null206 反转链表双指针原创 2022-06-20 22:54:01 · 399 阅读 · 0 评论 -
leetcode--数组
1.二分查找二分法的条件:有序数组、没有重复元素二分法重点:①注意区间左闭右闭区间:[left,right] 可以取到left == right 所以循环写成while(left<=right) right = length - 1左闭右开区间:[left,right) 不可以取到left == right 所以循环写成while(left<right) right = length②注意middle取值:为了防止溢出 middle = left + (right - ..原创 2022-06-10 11:12:05 · 382 阅读 · 0 评论 -
leetcode--哈希表
哈希表:用来快速判断一个元素是否出现集合里对于哈希表,要知道哈希函数和哈希碰撞在哈希表中的作用.哈希函数是把传入的key映射到符号表的索引上。哈希碰撞处理有多个key映射到相同索引上时的情景,处理碰撞的普遍方式是拉链法和线性探测法。哈表有三种数据结构:数组、set,map①数组242有效的字母异位词bool isAnagram(string s,string t){ //record用来记录字符串s里字符出现的次数 int record[26] = {0...原创 2022-05-26 16:53:43 · 604 阅读 · 0 评论 -
c++笔记(二)
1.指针C++的精髓之一就是多态性,只有指针或者引用可以达到多态。使用指针的好处:第一实现多态。第二在函数调用,传指针参数。不管你的对象或结构参数多么庞大,你用指针,传过去的就是4个字节。如果用对象,参数传递占用的资源就太大了。类对象和类指针:类的对象:用的是内存栈,是个局部的临时变量。类的指针:用的是内存堆,是个永久变量,除非你释放它。类和对象是两回事,对象是类的实例;对象是在栈中分配的,使用new生成的对象是在堆中分配的;要发挥虚函数的强大作用,必须使用指针来访问对象.原创 2022-05-17 19:38:07 · 207 阅读 · 0 评论 -
c++笔记(一)
1c_str()函数 返回值类型是 const char *.c_str是string类的一个函数,可以把string类型变量转换成char* 变量文件操作中open()要求的是一个char*字符串 ,当文件名是string时需要转换,当文件名是字符数组型时就不需要此转换。//c_str()的简单使用// char *c定义会报错 无法将const char* 转换为char*const char *c;string s = "abcde";c = s.c_str();...原创 2022-05-16 20:29:07 · 476 阅读 · 0 评论