![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
Woosual
做着算法的研究却想搞软开
展开
-
C++20支持协程了,快来学学协程
golang作为一种后台开发语言,可以直接支持协程且语法更为简单,C++20的特性也使得C++变得更为简单和强大。下面就来谈谈协程多线程模型中内核实现线程与线程之间的调度,通常一个线程是无法从头到尾占用着 cpu 的,尤其是进行 i/o 操作时,许多的系统调用都是阻塞的,此时内核保存该线程的上下文,然后挂起该线程。当然更多时候是由于该线程的本次运行时间耗尽,只得被挂起等待 cpu 的下一次临幸。但是多线程存在两个问题,在线程数量过多时,问题被放大的尤为明显线程的上下文切换造成的开销。线程之间对资源原创 2020-08-11 10:53:34 · 3631 阅读 · 1 评论 -
C++ STL库中的multimap和unordered_multimap
首先,map和unordered_map中在插入时一个key只能对应一个value,map的底层实现是红黑树,且key顺序是有序的,unordered_map的底层实现是hash。简单试一下map: map<int, int> oMp; oMp[1] = 112; oMp[3] = 2; oMp[2] = 22; oMp[5] = 12; oMp[2] = 11; for (auto e : oMp) { cout << "key: "<< e.fir原创 2020-08-08 20:29:14 · 1454 阅读 · 0 评论 -
顺时针打印矩阵——状态机封装法
最近面试字节跳动时,面试官给了这个题{ {1, 2, 3, 4},{5, 6 ,7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}, {17, 18, 19, 20} };虽然去年做过类似的题,但是需要申请一份空间用于记录矩阵是否被打印,这种思路被面试官直接否定,让我不许开辟空间。由于需要不断判断当前打印值的位置,逻辑上比较麻烦,但是没做出来。后来挂了,自己再考虑这个题时,觉得可以用状态机来解决这一类比较复杂的问题。结合状态机的封装,找到了一中空间复杂度为O(1)的做法,时间复原创 2020-06-26 10:32:08 · 218 阅读 · 0 评论 -
交叉锁死锁
#include <iostream>#include <thread>#include <mutex>#ifdef _WIN32#include <windows.h>#elif defined(UNIX)#include <unistd.h>#endifusing namespace std;int d = 2;mutex mt1, mt2;void a2() { mt2.lock(); cout <原创 2020-06-25 11:55:49 · 509 阅读 · 0 评论 -
压缩算法-腾讯笔试 用递归的方式代替入栈和出栈
小Q想要给他的朋友发送一个神秘字符串,但是他发现字符串的过于长了,于是小Q发明了一种压缩算法对字符串中重复的部分进行了压缩,对于字符串中连续的m个相同字符串S将会压缩为m|S,例如字符串ABCABCABC将会被压缩为[3|ABC],现在小Q的同学收到了小Q发送过来的字符串,你能帮助他进行解压缩么?输入描述:输入第一行包含一个字符串s,代表压缩后的字符串。S的长度<=1000;S仅包含大写字母、[、]、|;解压后的字符串长度不超过100000;压缩递归层数不超过10层;输出描述:输出一个原创 2020-06-18 16:22:16 · 225 阅读 · 0 评论 -
大疆M210 V2+妙算2-G+LIVOX MID-40使用记录
大疆M210 V2+妙算2-G+LIVOX MID-40使用记录本文总结上述设备在使用过程中遇到过的问题,主要记录除了产品说明书未说明的部分。1.1妙算2-G供电问题这个由于工作人员在交货的时候也不清楚如何供电,经过与客服一天的交流,M210V2要使用外部供电需要在遥控器的APP中扩展I/O选项中开启对外供电功能。1.2PCL库安装首先查阅了PCL的getstart,阅读了PCL论文。有两点个人觉得比较重要:文中明确提到所有数学计算依赖eigen库,可视化部分依赖于VTK库先查阅了一下博客,考原创 2020-06-14 08:56:49 · 1367 阅读 · 0 评论 -
ubuntu搭建PCL和liblas过程中遇到的一些问题汇总
装这两个库真的是要吐了, 本文不教装环境,仅仅记录本人在装环境过程中出现的关键问题liblas和PCL的安装就不多说了,网上教程一大堆,最重要的要了解有什么依赖库再动手,比如说boost,eigen,VTK,numpy,cmake等等一大堆,先装依赖库,装好了之后再去编译源码,关于PCL库没啥好说的,就是依赖库装好按着流程来就行了。在编译liblas的过程中存在着比较致命的问题,我从github上面下载的源码,你可能存在的问题主要有以下两个,其他的我认为都是依赖库没装好的原因,每次出错要认真阅读错误并分原创 2020-06-13 15:28:59 · 3250 阅读 · 0 评论 -
求最长回文子串
字符处理编程笔记一1.最长回文子串1.最长回文子串题目:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。123示例 2:输入: "cbbd"输出: "bb"12解法一:暴力解法1.两重循环遍历所有子串;2.判断回文子串。时间复杂度:O(n3) O(n^3)O(n3)#include <iostream>#in..转载 2020-06-12 18:52:41 · 182 阅读 · 0 评论 -
LeetCode动态规划递归调用解法记录
题目描述:给定一个字符串s和一组单词dict,在s中添加空格将s变成一个句子,使得句子中的每一个单词都是dict中的单词返回所有可能的结果例如:给定的字符串s="catsanddog",dict=["cat", "cats", "and", "sand", "dog"].返回的结果为["cats and dog", "cat sand dog"].#includ...原创 2020-03-10 15:25:12 · 187 阅读 · 0 评论 -
进程间通信
转自传智播客黑马程序IPC方法Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到,所以进程和进程之间不能相互访问,要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communicatio...原创 2020-02-13 10:55:06 · 244 阅读 · 0 评论 -
二叉树的递归遍历与迭代遍历
题目描述求给定的二叉树的后序遍历。例如:给定的二叉树为{1,#,2,3}, 1↵ ↵ 2↵ /↵ 3↵返回[3,2,1].备注;用递归来解这道题太没有新意了,可以给出迭代的解法么?Given a binary tree, return thepostordertraversal of its nodes' values.For...原创 2020-02-07 10:58:02 · 365 阅读 · 0 评论 -
二叉树的递归遍历
/*** Definition for binary tree* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*///实现二叉树的递归遍历...原创 2020-02-06 10:59:30 · 109 阅读 · 0 评论 -
十大排序算法C++实现
内容转自:https://blog.csdn.net/weixin_41190227/article/details/86600821,采用C++实现。0、排序算法说明0.1 排序的定义对一序列对象根据某个关键字进行排序。0.2 术语说明稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;内排序...转载 2020-06-14 08:57:52 · 317 阅读 · 0 评论 -
计算逆波兰式(后缀表达式)的值——栈的使用
s.empty(); //如果栈为空则返回true, 否则返回false;s.size(); //返回栈中元素的个数s.top(); //返回栈顶元素, 但不删除该元素s.pop(); //弹出栈顶元素, 但不返回其值s.push(); //将元素压入栈顶题目描述计算逆波兰式(后缀表达式)的...原创 2020-02-01 10:43:49 · 799 阅读 · 0 评论 -
LeetCode求给定二叉树的最小深度讨论总结
题目描述求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest le...原创 2020-01-31 20:33:37 · 585 阅读 · 0 评论 -
15 大话设计模式C++实现之抽象工厂模式
/*抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类*//*实例:不同客户的数据库管理采用不同的数据库完成,不同的数据库在语法上存在差异,因此需要解除用户和具体数据库之间的耦合(即业务逻辑与数据访问的解耦),避免向不同类型的客户提供支持时的代码复用*/#include<iostream>#include<string>...原创 2020-01-28 12:06:45 · 234 阅读 · 0 评论 -
14 大话设计模式C++实现之观察者模式
/*观察者模式(又叫发布-订阅模式)定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时会通知所有的观察者对象*//*例子:有员工在上班时间看电影、NBA、股票等与工作无关的内容,前台可以给员工发送通知,因此所有的员工通过监听受监测对象即可对自身的工作做出调整同样的,老板也需要通知一些业务内容,因此例子主要让在干不同事的员工监听前台类和...原创 2020-01-09 15:45:26 · 187 阅读 · 0 评论 -
C++ List使用
转载网址:https://blog.csdn.net/xiaoquantouer/article/details/70339869头文件#include<list>声明一个int型的list:list<int> a;1、list的构造函数list<int>a{1,2,3}list<int>a(n) //声明一个n个元...转载 2019-12-20 18:33:09 · 244 阅读 · 0 评论 -
13 大话设计模式C++实现之建造者模式
例子说明1:炒菜没放盐和肯德基的标准化例子说明2:画一个不同形态的小人(高矮胖瘦各不同)/*建造者模式(生成器模式):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式可以将一个产品的内部表象与产品的生成过程分隔开来,从而可以使一个建造过程生成具有不同的内部表象的产品。如果我们使用了建造者模式,那么用户就只需要指定需要建造的类型就可以得到他们,...原创 2019-12-19 19:54:51 · 140 阅读 · 0 评论 -
12 大话设计模式C++实现之外观模式
/*外观模式:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这一接口使得这一子系统更加容易使用其中外观类需要了解所有子系统的方法或属性,对它进行组合,以备外界调用。何时使用外观模式:首先,在设计阶段初期,应该有意识的将不同的两个层分离,比如经典的三层架构,就需要考虑在数据访问层、业务逻辑层和表示层的层与层之间建立Facade,这样可以为系统提供一个简单的接口,使...原创 2019-12-19 19:48:45 · 157 阅读 · 0 评论 -
迪米特原则
/*迪米特原则(强调类之间的松耦合)如果两个类不必彼此通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的方法的话,就可以通过第三者转发这个调用。迪米特法则首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。类之间的耦合越弱,越有利于复用,一个处在弱耦合的类...原创 2019-12-19 19:12:45 · 140 阅读 · 0 评论 -
10 大话设计模式C++实现之模板方法模式
/*模板方法模式是实现一个模板父类,父类实现所有重复的代码让子类可以修改父类维持的元素或者函数,子类可以利用多态、根据需要重写父类*/#include <iostream>#include <string>using namespace std;typedef string(*PFUNC) ();class TemplateClass{public:...原创 2019-12-19 19:00:29 · 119 阅读 · 0 评论 -
09 大话设计模式C++实现之原型模式9.3&9.4
9.3 原型模式:#include<iostream>#include<string>using namespace std;/*用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象,原型模式实际上就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节一般在初始化信息不发生变化的情况下,克隆是最好的办法。这样既隐藏了对象创建的细...原创 2019-12-17 20:31:49 · 172 阅读 · 0 评论 -
09 大话设计模式C++实现之原型模式之理解深拷贝和浅拷贝
1. 赋值构造函数的四种调用场景(调用时机)场景1: #include "iostream" using namespace std; class AA { public: AA() //无参构造函数 默认构造函数 { cout...原创 2019-12-17 15:44:09 · 415 阅读 · 0 评论 -
08 大话设计模式C++实现之工厂方法模式
简单工厂UML工厂方法模式UML(多了一个工厂基类)----------→ 依赖关系实现如下:#include<iostream>#include<string>#include<stdexcept>using namespace std;/*书中的例子: 雷锋生病了,由雷锋的同学们去照顾老人*///首先来实现工厂方法...原创 2019-12-16 20:53:46 · 149 阅读 · 0 评论 -
07 大话设计模式C++实现之代理模式
# 类图/*代理模式:例子:追女生让别人帮忙送礼物,就是通过代理完成业务代理实现接口,代理类关联于追求者类,也就是说代理的业务主要取决于请求者代理与请求者实现相同的接口,因此利用纯虚函数实现接口类*/#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<string>using nam...原创 2019-12-16 19:10:20 · 204 阅读 · 0 评论 -
06 大话设计模式C++实现之装饰模式
/*把所需的功能按照正确的顺序串联起来进行控制例子:QQ秀的装扮,我们不关心穿衣服的过程,只需要看到结果,同样一个QQ人物,我可以不用重新定义person类,仅对装扮进行改变同时,不同装扮也是一个对象,将这些对象作用到QQ人物上面可能会经常存在变化,因此不应该将变化在person类中实现,通过复用person类,动态的加载装扮类。同时装扮的过程中存在一些重复的操作,如穿上当前的衣服,脱掉当...原创 2019-12-16 16:18:09 · 119 阅读 · 0 评论 -
05 大话设计模式C++实现之依赖倒转原则
/*依赖倒转原则:抽象不应该依赖于细节,细节应该依赖与抽象。也就是说要针对接口编程而不是针对实现编程A. 高层模块不应该依赖于底层模块。两个都应该依赖于抽象B. 抽象不应该依赖于细节,细节应该依赖于抽象*///动物类的抽象#define _CRT_SECURE_NO_WARNINGS#include<iostream>using namespace std;...原创 2019-12-15 20:12:50 · 150 阅读 · 0 评论 -
03 04 大话设计模式C++实现之拍摄UFO和求职考研两不误——单一职责原则和开闭原则
/*单一职责原则拍摄UFO, 单一职责原则就一个类而言,应该仅有一个引起它变化的原因比如我们写一个窗体应用程序,一般都会生成一个Form1这样的类,于是我们就把各种各样的代码,像某种商业运算的算法啊,访问数据库的SQL语句等都写到这样的类中,就意味着无论什么样的需求都需要改这个窗体类,这其实很糟糕,维护很麻烦,复用不可能,也缺乏灵活性如果一个类承担过多的职责,就等于把这些职责耦合到一...原创 2019-12-15 19:33:57 · 144 阅读 · 0 评论 -
02 大话设计模式C++实现之商场促销——策略模式
/*策略模式(商场促销):算法时常改变,它定义了算法家族,分别封装起来,让他们之间可以相互替换此模式让算法的变化不会影响使用算法的客户*/#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<string>using namespace std;//定义一个抽象类算法class Stra...原创 2019-12-12 20:45:32 · 281 阅读 · 0 评论 -
01 大话设计模式C++实现之简单工厂模式
#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<stdexcept>using namespace std;//业务的封装过程让业务逻辑与界面逻辑分开,从而使程序容易修改、易于复用//通过类的封装、继承、多态将程序的耦合度降低//Operation运算类class Operation...原创 2019-12-12 20:27:11 · 138 阅读 · 0 评论