自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(542)
  • 论坛 (1)
  • 收藏
  • 关注

原创 工作与生活

商汤工作: 无论如何要记住自己来到这里的目的是什么。不是当领导,不是拿死工资,更不是混日子,消极抱怨。 我的目的是增长自己的知识面,嵌入式,操作系统底层,芯片,自动驾驶算法与软件,sdk的设计与维护,调试与调优能力。还有,与各色人打交道的能力,面对危机的能力。阿,想起了王阳明。现在看起来,这里的这个工作是有一些缺陷的,比如花太多的时间与其他组的人对接!经常上车测试,导致看代码的时间大幅减少。这个问题是我需要平衡的一个问题,坚持两个月看一下,如果的确先用了太多时间再考虑对策,调整工作,换部门或者去外企。

2021-01-26 09:27:14 27

原创 C++ template metaprogram(元编程)

metaprogramming含有“对一个程序进行编程”的意思。换句话说,编程系统将会执行我们所写的代码,来生成新的代码,而这些新代码才真正实现了我们所期望的功能。通常而言,metaprogramming这个概念意味着一种反射的特性:metaprogramming组件只是程序的一部分,而且它也只生成一部分代码或者程序。我们为什么需要metaprogramming呢?和大多数程序设计技术一样,使用metaprogramming的目的是为了实现更多的功能,并且使花费的开销更小,其中开销是以:代码大...

2021-01-10 21:08:12 22

原创 windows10安装ubuntu双系统

Ref:https://www.cnblogs.com/masbay/p/10745170.html

2021-01-10 16:17:59 46

原创 制作ubuntu安装U盘,安装错误gfxboot.c32 not a com32r image

在出现“gfxboot.c32:not a COM32R image boot”的时候,按下Tab键,Then you will see a set of options (live, live install, etc). Select the one that you like typing its name and pressing Enter.1)输入live进入试用Ubuntu模式,在试用模式安装Ubuntu。2)输入live-install (亲测可以)直接进入安装模式。是.

2021-01-07 17:56:16 33

原创 C++/C中的size_t

Ref:https://jeremybai.github.io/blog/2014/09/10/size-t

2021-01-06 12:37:38 22

原创 C++ new、operator new、placement new

new和delete操作符我们都用过,它们是对堆中的内存进行申请和释放,而这两个都是不能被重载的。要实现不同的内存分配行为,需要重载operator new,operator delete,而不是new和delete。operator new 就像operator+一样,是可以重载的,但是不能在全局范围对原型为 void operator new(size_t size) 这个函数进行重载,一般只能在类中进行重载。如果类中没有重载operator new,那么调用的就是全局的::operat...

2021-01-04 22:00:45 27

原创 C++11 中的 emplace

C++11中大部分的容器对于添加元素除了传统的 insert 或pusb_back/push_front 之外都提供一个新的函数叫做emplace。 比如,如果你想要向 std::vector 的末尾添加一个数据,你可以:std::vector<int> nums; nums.push_back(1);你也可以使用:std::vector<int> nums;nums.emplace_back(1);避免不必要的临时对象的产生emplace...

2021-01-04 21:01:44 20

原创 模块条件编译(CMake C++多态 工厂模式)

场景描述:每年的夏天都会有台风,为了给减少台风对人类造成的损失,需要对产生自海洋的台风路径进行预测。当前,中国,欧盟,日本,美国等各国都会有自己的台风预测部门,他们使用的算法也不相同。现在,需要写一个程序,该程序接受一个入参,以指示使用哪个国家的算法来预测台风。使用c++实现,于是自然地会使用多态,建立一个基类(接口类), 各个国家的算法类都继承自该基类。另外,为了实现跨平台,我们采用CMake来组织编译。借助CMake可以方便地实现选择性编译,例如,你本地有15个国家的算法实现,但是客户只需要3

2020-12-19 23:17:08 46 1

原创 基于cmake生成动态库,静态库,并调用

绝望的时候抬头看看,希望就在不远处闪闪发光。工程实践中,经常遇到动态库、静态库的创建和使用,使用cmake可以方便地完成跨平台编译。此例,写了一个用于实现加法和减法的类,并将其编译成动态库和静态库,并由可执行文件来调用它们。静态库:SolutionDLL动态库:SolutionStaticLib调用动态库的可执行文件: CallDLL调用静态库的可执行文件:CallStaticLibVs solution:Code:https://github.com...

2020-12-19 22:48:24 85 3

原创 责任链模式(Chain of Responsibility Pattern)

责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。常用场景1)有一个请求数据,有一组handler, 其中的某一个handler可以用来处理该请求,可以将所有的handler连成一个chain,数据发送给第一个handler,其判断自己能否处理该数据,如果能则处理,并结束,否则, 调用下一个handler的处理函数.

2020-12-16 22:05:50 32

原创 C++汇编

Ref:https://www.cnblogs.com/LyShark/p/12771924.html

2020-12-05 23:35:04 106

原创 unix文件路径简化

描述:https://leetcode-cn.com/problems/simplify-path/以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外...

2020-12-03 23:02:34 142

原创 判断二叉树是否是对称的--以根节点的中线为轴

描述:请判断一个二叉树是否是对称的(以根节点的中线为轴), 例如,如下的则是对称的:方案1:基于循环法进行树的广度优先遍历,左右子树分别单独遍历,并将节点保存到vector中. 对于左子树的各个层,我们总是先访问左侧的节点, 对于右子树的各个层,我们总是先访问右侧的节点。最后比较左右子树的vector中的元素是否对应相等.如果树是对称的,则必定相等。缺点是: 需要额外的空间较多。首先,树的广度优先遍历使用了queue, 然后为了保存节点,使用了vector。引申:对于左子树进行 ...

2020-11-30 00:04:20 121

原创 电脑端滚动截屏工具FastStone Capture

实测好用,腾讯软件中心可以下载:https://pc.qq.com/detail/0/detail_720.html

2020-11-25 22:38:42 108

原创 c++11 实现读写锁

Note: C++ 17里已经引进了读写锁 std::shared_mutex , 其lock()即以写方式加锁, 其lock_shared()即以读方式加锁。https://en.cppreference.com/w/cpp/thread/shared_mutex实现一个读写锁类, 可以有两种方式获取锁,读方式,写方式。 允许多个"读线程"同时进入临界区,但是同一时刻只允许一个"写线程"进入临界区。当有写线程进入临界区时,不允许任何其他读或写线程同时进入。 写线程优先。方法:在类中增加成...

2020-11-25 22:34:43 215

原创 前置声明属于一个命名空间内的类

Class spaceDeclTest属于TestA这个命名空间:#pragma once#include <iostream>namespace TestA { class spaceDeclTest { public: void print(); };}TestA的实现:#include "spaceDeclTest.h"using namespace TestA;void spaceDeclTest::pri...

2020-11-24 08:45:37 117

原创 python爬取一个博主的所有文章至pdf

Step 1:安装pdfkit包: https://blog.csdn.net/qq_35865125/article/details/109920565Step 2:将单篇文章爬取下来转成pdf。 首先,根据文章的网址得到该网页的所有内容(借助urllib,bs4,re模块),然后,从中截取文章主题部分,因为网页内容包括评论区等太多东西。最后将主题部分转成pdf。例子: 可以运行:import pdfkitimport osimport urllib.requ...

2020-11-22 11:49:22 259

原创 Python- 网页转pdf工具包pdfkit

Pdfkit (https://pypi.org/project/pdfkit/ )Python 2 and 3 wrapper for wkhtmltopdf utility to convert HTML to PDF using Webkit.安装:pip install pdfkit 即可安装(https://blog.csdn.net/qq_35865125/article/details/106176741 )。Note:该工具包是对wkhtmltopdf ...

2020-11-22 10:08:26 124

原创 C++ STD标准模板库的泛型思想

在C++泛型程序设计领域中,最显著的贡献就是STL(StandardTemplateLibrary),它后来被采纳并引入到C++标准库中。STL实际上是一个框架,它提供了许多有用的操作,我们也把这些操作称为算法;它同时也为对象集合提供了数据结构,我们把这些数据结构称为容器;算法和容器都以模板实现。STL实现了算法和容器的分离:算法并不是容器的成员函数,而是以一种泛型的方式编写的;因此任何容器(和线性的元素集合)都可以使用这些算法。为了实现这个目的,STL的设计者引入了一个称为迭代器的抽象概...

2020-11-21 09:24:27 145

原创 C++ Abstract class vs Interface

Abstract classAn abstract class is, conceptually, a class that cannot be instantiated and is usually implemented as a class that has one or more pure virtual (abstract) functions.A pure virtual function is one which must be overridden by any concrete...

2020-11-20 08:54:08 124 1

原创 C++ 动多态 vs 静多态

《c++ templates, chapter14》Summary术 语:---通过继承实现的多态是 绑定的 和 动态的。绑定指: 各个子类的接口需要与公共基类的虚函数相同。 有时,也把绑定这个概念称为入侵的或插入的。动态指: 接口的绑定是在运行期完成的。用基类的指针去调用哪个子类的虚函数呢,运行时才确定;---通过模板实现的多态是 非绑定的 和 静态的非绑定指: 不需要基类提供公共的接口。静态指: 接口的绑定是在编译期完成的,即在编译器确定调用的哪个类的哪个...

2020-11-20 08:42:05 78

原创 桥模式(Bridge)以及工程应用

概念建立两套相互独立的类继承体系,然后,通过让一个类引用另一个类来连结起来, 避免类组合的爆炸。例如,当前有各种图形:圆形,三角形,长方形,它们有公共的基类class ShapeBase, 公共的虚函数接口为drawShape,用于绘制出不同的形状。现在加一个需求,需要能绘制出不同颜色的形状,颜色要求有红色,绿色,蓝色,而且将来可能增加颜色。如果用继承的方式来实现的话,一种方式是,有一个公共的ShapeBase基类,然后派生出各种图形,然后各个图形又派生出自己的各种颜色的图形,如下图所...

2020-11-19 23:14:09 180

原创 C++ std::map

1. 使用std::map进行排序#pragma once#include <algorithm>#include <map>#include <string>#include <iostream>using namespace std;// 自己编写的Compare,实现按照字符串长度进行排序struct CmpByKeyLength { bool operator()(const string& k1, con...

2020-11-15 21:52:22 112

原创 C++ algorithm库常用函数

头文件:#include <algorithm>1) std::max, std::min;2) std::swapint a = 1;int b = 2;std::swap(a,b);#if _HAS_CXX17template <class _Ty, enable_if_t<is_move_constructible_v<_Ty> && is_move_assignable_v<_Ty>, int...

2020-11-15 21:36:41 136

原创 C++的最小整数和最大整数 -- limits.h头文件

需要定义最大值,最小值时,可以方便使用。

2020-11-15 21:25:42 104

原创 C++ 11 thread之join、detach

Please refer to <C++ concurrency in actioin, second edition> chapter 2.1.

2020-11-15 21:14:09 115

原创 C++11之 final, override关键字

final1. 阻止类被继承C++11中允许将类标记为final,即直接在类名称后面使用关键字final,这样编译器会阻止该类被其他类继承,否则编译器报错。class specialArray final{public: specialArray() {}; virtual ~specialArray() {};};2. 禁止子类重写基类的虚函数, 注意:只能用于virtual函数。override关键字https://en.cppref...

2020-11-15 20:52:56 105

原创 生成特殊数组 4度斜线递增

给定数组的长rowNum和宽coluNum,生成如下的数组:思路1:--尚未code,思路2更好。1)计算总共有多少斜线2)计算每一条斜线的起点在数组的哪个位置,以及起点的元素大小,以及该斜线上有几个元素。思路2: 蔓延法。从左上角开始,一个一个设置数组的值,设置完一个后,从当前位置沿着指定方向 (例如右上方)前进到下一个位置, 能达到的话,则设置,否则,开始变方向。转向时的第一个任务便是,找到新起点,,如果刚刚完成的是右上方的前进,则下一次的起点在本次的右方...

2020-11-15 20:27:07 113

原创 C++ std::unique_lock与std::lock_guard

std::lock_guardhttp://www.cplusplus.com/reference/mutex/lock_guard/用于托管一个mutex 变量,负责对齐加锁解锁。A lock guard is an object that manages a mutex object by keeping it always locked.On construction, the mutex object is locked by the calling thread, and ...

2020-11-15 12:02:17 93

原创 c++ 11实现一个定时器,周期性地执行指定的task

可以直接使用c++11的thread, mutex, conditon_variable来实现, 结合了std::function.Note:1)start函数,开辟一个新的线程,并detach,在这个线程中周期性地执行task。 建立一个std::thread线程时,需要传入一个可调用对象,这里使用了lambda函数,非常方便。 start函数的入参是,周期时间ms,以及一个std::function<void()>2) 使用了c++11的原子变量...

2020-11-15 11:16:27 184

原创 获取队列的最大值,时间复杂度限制在o(n)

https://leetcode-cn.com/problems/dui-lie-de-zui-da-zhi-lcof/请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。若队列为空,pop_front 和 max_value 需要返回 -1.class MaxQueue {public: MaxQueue() {} int max_value(...

2020-11-15 10:46:28 49

原创 处理二叉树使得任何节点的右子树的最大值大于左子树的最大值

与二叉树的镜像很相似:https://blog.csdn.net/qq_35865125/article/details/79339200思路:遍历所有的节点,遍历到某个节点时,得到该节点的左子树的最大值Lmax,右子树的最大值Rmax,如果Lmax>Rmax,则交换左右子树。可以写一个函数in getMaxVal(Node* root), 返回以root为根节点的树的最大值。 另外,可以在Node结构体中怎加变量记录其子树的最大值, 在遍历节点时,采用深度优先的方法,先遍历最下...

2020-11-11 22:44:16 89

原创 皇位继承顺序(树的深度遍历(前序遍历))

https://leetcode-cn.com/problems/throne-inheritance/一个王国里住着国王、他的孩子们、他的孙子们等等。每一个时间点,这个家庭里有人出生也有人死亡。这个王国有一个明确规定的皇位继承顺序,第一继承人总是国王自己。我们定义递归函数 Successor(x, curOrder) ,给定一个人 x 和当前的继承顺序,该函数返回 x 的下一继承人。请你实现 ThroneInheritance 类: ThroneInheritance(...

2020-11-10 23:00:59 63

原创 数组的最长上升子序列

给定一个无序的整数数组,找到其中最长上升子序列的长度, 注意,并没有连续的要求。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明: 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为 O(n2) 。方法:https://leetcode-cn.com/problems/longest-increasing-subsequen...

2020-11-10 06:30:17 72

原创 字母大小写全排列

给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。示例:输入:S = "a1b2"输出:["a1b2", "a1B2", "A1b2", "A1B2"]输入:S = "3z4"输出:["3z4", "3Z4"]输入:S = "12345"输出:["12345"]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/letter-case-permutation.

2020-11-07 22:28:16 49

原创 经典死锁问题 - 哲学家圆桌就餐

https://leetcode-cn.com/problems/the-dining-philosophers/5 个沉默寡言的哲学家围坐在圆桌前,每人面前一盘意面。叉子放在哲学家之间的桌面上。(5 个哲学家,5 根叉子)所有的哲学家都只会在思考和进餐两种行为间交替。哲学家只有同时拿到左边和右边的叉子才能吃到面,而同一根叉子在同一时间只能被一个哲学家使用。每个哲学家吃完面后都需要把叉子放回桌面以供其他哲学家吃面。只要条件允许,哲学家可以拿起左边或者右边的叉子,但在没有同时拿到左右叉子时不...

2020-11-05 21:37:12 38

原创 C++中的四种类型转换

1 static_caststatic_cast < type-id > ( expression )static_cast更有利于检查出危险的类型转换:https://blog.csdn.net/u010857719/article/details/522700831 基本类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证.但不能用于不同指针类型之间的类型转换float af = 3.0f;double*...

2020-11-03 22:00:16 37

原创 二叉树转换为链表

source: https://leetcode-cn.com/problems/flatten-binary-tree-to-linked-list/两种方法,都是基于二叉树的前序遍历,一种是递归方法(借助一个额外的vector实现节点的缓存),一种是循环方法(循环方法实现前序递归本身就需要借助stack,这里正好借助该stack作为缓存,进行转换),见代码:#pragma once#include <iostream>#include <vector...

2020-11-02 22:24:03 83

原创 链表 - 两两交换相邻节点的值

leetcode:https://leetcode-cn.com/problems/swap-nodes-in-pairs/MyCode: 双指针:#pragma once#include <iostream> //Definition for singly-linked list. struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nu...

2020-11-02 08:03:47 53

原创 从 c++ std::vector的resize和reserve看vector的源码实现

基本用法reserve是容器预留空间,但并不真正创建元素对象,在创建对象之前,不能引用容器内的元素,因此当加入新的元素时,需要用push_back()/insert()函数。resize是改变容器的大小,并且创建对象,因此,调用这个函数之后,就可以引用容器内的对象了.再者,两个函数的形式是有区别的,reserve函数之后一个参数,即需要预留的容器的空间;resize函数可以有两个参数,第一个参数是容器新的大小,第二个参数是要加入容器中的新元素,如果这个参数被省略,那么就调用元素对象的默认构...

2020-11-01 11:22:26 81

空空如也

蚓无爪牙之利的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除