自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 资源 (1)
  • 收藏
  • 关注

原创 计算岛屿的数量

给一个二维数组,元素只有0和1,1代表岛屿,0代表海水,如果与1相邻的位置还是1,这一片1仅代表一个岛屿,计算岛屿的数量/* [[1,1,0,0,0], [0,1,0,1,1], [0,0,0,1,1], [0,0,0,0,0], [0,0,1,1,1]] 岛屿数量是3三个*/上述例子中就只包含了三个岛屿.解题思路:如果遍历到当前元素是1,岛屿数量+1,然后在深度优先遍历它上下左右四个位置的元素,把与它相邻且为1的元素都置为0int solve(std::vecto

2021-04-03 21:37:36 576

原创 c++11实现简单的生产者消费者任务模型

生产者消费者模型是多线程同步的一个典型例子,运用锁和条件变量对两个线程做同步处理.#include <iostream> #include <queue>#include <thread> #include <mutex> #include <unistd.h> #include <condition_variable> using namespace

2021-04-02 23:44:32 547

原创 c++11实现一个线程池,多任务的分配与调度

什么是线程池?线程池是一种线程使用模式.线程过多或者频繁的创建和销毁线程会带来调度开销,进而影响缓存局部性和整体性能.而线程池维护着多个线程,等待着管理器分配可并发执行的任务,这避免了在处理短时间任务时创建与销毁线程的代价,以及保证了线程的可复用性.线程迟不仅能保证内核的充分利用,还能防止过分调度.线程池原理预先创建预定数量的线程,将多个任务加入到任务队列,类似于生产者消费者,多个线程相当于消费者,一个任务队列充当生产者.当任务队列被塞入任务时,线程们就去竞争这些任务,但当每次只有一个线程能够得

2021-04-01 22:28:57 2667

原创 c++给定一个数组,里面的元素都各不相同,判断其是否为一个二叉搜索树的后序遍历

二叉搜索树:根节点的值大于左子节点的值,小于右子节点的值,并且其左右子树也是一个二叉搜索树;后序遍历:左->右->根思路就是:数组中最后一个元素显示就是根节点,然后根据大小关系,把数组分为左右子树,再做遍历即可;bool isBstPost(std::vector<int>& array) { int length = array.size(); if(length == 0) return false; int

2021-03-30 21:16:33 288

原创 利用c++设计实现一个LRU缓存

利用c++设计实现一个LRU缓存LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”主要提供两个对外的接口,一个是getVal(key),根据key在缓存找对应的val值;一个是setVal(key,val)向lru缓存中插入一个val.设计思具体是利用hash_map保存key和对应的val值,因为要考虑删除最久未使用的key和把当前使用的key置换成最新的key,因此val的设

2021-03-28 23:13:07 271

原创 给定一个整数数组,数组中有正负数随机分布,要求将正数负数间隔分布,且不改变其原来的顺序。

给定一个整数数组,数组中有正负数随机分布,要求将正数负数间隔分布,且不改变其原来的顺序。例如【1, 2, 3, -2, -4, -6, 7, 8】 => 【1,-2, 2, -4, 3, -6, 7, 8】思路1:开辟一个O(n)的空间,定义两个下标,一个指向正数,一个指向负数,分别按照正负的顺序push_back到新数组里面即可;思路2:不开辟0(n)的空间,先对原数组进行一个操作,将正数排在负数的后面,然后依次挪动负数即可;思路二代码如下://给一个有正负数的数组,让正数排在负数

2021-03-27 00:53:05 651

原创 两个QListWidget相互拖拽item,并删除对应的item

qt的QListWidget有选择拖拽的属性, list1->setDragEnabled(true):可拖拽list2->setAcceptDrops(true):接受拖拽;这样简单设置之后能满足我们的需求,但会有一个问题,就是从list1拖拽到list2的item拖拽动作完成后这个item还依旧在list1上面,为了解决这个问题,我们可以写一个自己的QListWidget类,先看下效果:先看myQlistWidget的声明:class myQlistWidget : pu...

2020-09-12 10:01:07 1586

原创 递归反转单链表

采用递归实现这个过程,先找到链表的最后一个节点然后向前返回NULL跟next的值即可:struct ListNode{ int value; ListNode *next;}; ListNode* reverseList(ListNode *head){ if(head == NULL || head->next == NULL) return head; else{ ListNode* newHead = reverse..

2020-09-10 16:20:58 159

原创 考虑可选的 virtual functions(虚拟函数)的替代方法

现在你工作在一个视频游戏上,你在游戏中为角色设计了一个 hierarchy(继承体系)。你的游戏中有着变化多端的恶劣环境,角色被伤害或者其它的健康状态降低的情况并不罕见。因此你决定提供一个 member function(成员函数)healthValue,它返回一个象征角色健康状况如何的整数。因为不同的角色计算健康值的方法可能不同,将 healthValue 声明为 virtual(虚拟)似乎是显而易见的设计选择:class GameCharacter {public: virtual int

2020-09-08 08:54:19 202

原创 c++异常安全的代码

假设有一个类,代表有背景图像的GUI菜单,这个类被设计成在多线程环境中使用,所以它有一个用于并行控制的互斥体(mutex):class PrettyMenu {public: ... void changeBackground(std::istream& imgSrc); // change background ... // imageprivate:

2020-09-03 15:52:11 309

原创 c++减少函数返回值为引用

首先函数参数作为引用来替代值传递会提高效率这是必然的,那么函数的返回值可以是引用吗?先看一个代表有理数的类,包含一个将两个有理数相乘的函数:class Rational {public: Rational(int numerator = 0, int denominator = 1); ...private: int n, d; frien

2020-09-01 10:59:55 221

原创 c++两个普通类利用回调函数传递信息

如果要在两个class对象之间传递数据,最简单直接的方法在一个类中定义一个全局变量,然后在另一个类里面export这个变量,这样就等于这个全局变量同时作用于两个类对象中,这样做能暂时解决问题,然而可能会出现新的问题,比如,代码的复用性不好,全局变量会在main之前初始化,增加了程序的负担;还有一个致命的问题,如果是多线程程序,就需要加锁保持同一时刻只能有一个对象在访问修改这个全局变量,程序的效率可能会下降,当然如果定义的全局变量过多,由于加锁不慎很可能会导致死锁,致使程序奔溃,今天介绍一中很实...

2020-08-31 14:42:29 2864

原创 TCP-简单介绍

  由于项目需要,基于socket写了一个服务器与客户端的程序,越写越体会到tcp协议的厉害之处,因此特地学习了一下,做下笔记  TCP俗称传输控制协议,它是为应用层提供服务的,尽管TCP和UDP都使用相同的网络层(ip),TCP却向应用层提供与UDP完全不同的服务,TCP提供一种面向连接的,可靠的字节流而服务  面向连接意味着两个都使用tcp的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接.这一过程与打电话很相似,显示拨号振铃,等待对方接通说"喂",然后才说明是谁,以

2020-08-19 16:44:44 449

原创 c++利用模板实现二叉树插入删除以及遍历

#include <iostream>using namespace std;template <typename Type>class BinaryTree;template <typename valType>class BTnode{ friend class BinaryTree<valType>;public: BTnode(const valType &val); void insert_valu.

2020-07-29 14:25:58 253

原创 string类型重载赋值运算符

经典解法CMyString& CMyString::operator = (const CMyString &str){ if(this == &str) return *this; delete []m_pData; m_pData = NULL; m_pData = new char[strlen(str.m_pData+1)]; strcpy(m_pData,str.m_pData); retur

2020-06-20 16:49:42 978

原创 打印一个char字符的八位

socket通信服务器需要给待发送的数据加个头,这样客户端只有确认了头才能开始解析包,项目中出了问题,就是加了一个char作为头,但是发送与接收这个char内容不符,想办法数据这个八位的char,看看是哪里出了问题unsigned char a;int r[8];r[0] = a & 0x01; // 最低道位专属r[1] = ( a & 0x02) >> 1;r[2] = ( a & 0x04) >> 2;r[3] = ( a &

2020-05-26 16:20:18 845 1

原创 apollo事件通信机制

我目前用的是基于ros版本的apollo,在apollo内部有两种消息传输机制,一种是基于ros的回调函数的订阅<详细介绍>来实现各个模块之间的数据通信,还有一种就是事件的通信机制,主要用于感知模块内部的通信,这种通信是基于进程间的内存共享来实现消息的传递.下面我主要介绍第二种消息传递的方式: 先看一下事件的实际应用 发布事件:void AsyncFus...

2020-01-16 14:46:59 1744 2

原创 QT制作视频播放器

应项目需要,我之前用ffmpeg合成的视频需要用一个界面播放,思来想去自学QT来做这个工作。首先我系统是ubuton16.0.4,先安装QT工具,然后直接开发。建议新来的朋友先自学一下QT的LayOut布局设计,使用布局会让你的控件更整齐,而且放在布局里的控件在设计好之后还可以跟着窗口的伸缩而伸缩,十分好用。网上很多将界面布局都用的代码来生成控件,这对QT初学者很不友好,我推荐一篇文章教大家用...

2019-08-23 15:37:05 2953 5

原创 gcc: internal compiler error: Killed (program cc1plus)

这两天在linux下编译apollo2.5的项目时不时会有这个错误gcc: internal compiler error: Killed (program cc1plus)Please submit a full bug report,with preprocessed source if appropriate.See <file:///usr/share/doc/gcc-4...

2019-04-22 10:34:10 1868 4

原创 我的apollo学习之路

持续跟新中Bazel入门:编译C++项目 apollo怎样添加一个新的共享数据类型 Apollo的感知融合模块解析 apollo planning模块源码分析 感知的单目、双目测距原理...

2019-04-17 17:17:37 614

原创 如何判断主机字节是大端还是小端存储

大端存储:数据的高位存放在地址的低位小端存储:数据的高位存放在地址的高位假设有无符号整型数A:0x12345678。先看它是怎么在这两种存放方式下存储的。大端:0x12345678 小端:0x78563412,有一个方法很好理解,A的地址由低到高是12 34 56 78(相当于12345678是数组下标那当然78是属于高地址)。A的数据高低位就更好理解了,跟我们的读数习惯是一样的123...

2019-04-15 17:12:23 574

原创 switch case与if/else的效率差在哪里!

在学校的时候经常写一些小的程序,遇到分支问题不假思索的选择使用if/else,只记得还有个switch case也能用但是很少选择它。然而真理往往是掌握在少数人手中的,如果分支数量较少选择switch case跟if/else的效率没有区别。当分支数量超过3个时switch case的效率就要明显高于is/else了。血和泪的经验真的是在实践中一点一点碰出来的! i...

2019-04-15 14:57:06 1626

原创 c++程序调用shell脚本,并向shell传入参数,shell脚本利用ffmpeg批量切割视频文件

任务:在linux平台下多次调用ffmpeg来切割多个视频 思考与难点:既然需要多次调用命令行命令ffmpeg,自然而然想到需要写一个shell脚本在c++程序中调用这个脚本就行了,但是问题并没有这么简单。c++程序中如何调用shell脚本?该怎么向shell脚本传入参数呢?shell脚本又是怎样来接受参数的1、c++程序中如何调用shell脚本?c++程序中调用shell脚本的三种方式...

2019-04-08 16:33:54 2413 2

原创 Shell脚本利用ffmpeg批量处理视频文件

最近遇到一个问题,对一个文件下所有视频文件进行切割处理,类似于把每个长30分钟视频文件截取其中的第10分钟到第20分钟的内容,截取出来的视频生成一个新的视频文件。当然在Linux底下我们有好用的工具ffmpeg,直接命令行就可以来切割视频。一般这种需要多次操作操作命令行的情况都可以把命令写成一个shell脚本来处理。如果没装的话可以参考这篇文章安装ffmpeg教程, ffmpeg的具体操作 学习...

2019-04-03 19:31:47 8807

原创 opencv截取视频

接到个任务截取一段视频的其中一段,并保存成一个新的文件。先说简单的方法适合在Linux系统直接调用的命令ffmpeg -i ./stream1.mp4 -vcodec copy -acodec copy --ss 00:00:10 -to 00:00:20 stream2.mp4 -y如果你是在windows下那么opencv可以帮你解决这个问题,直接看代码#include&l...

2019-03-27 12:52:15 1833

原创 Apollo之Canbus处理来自Control的Cmd

简述canbus apollo项目中canbus模块的主要作用是接收Control模块发布的指令,然后将指令解析为CAN协议报文与车辆的ECU交互,且得到指令的反馈信息,并将反馈结果发布为车辆底盘信息(Chassis_detail)。 先看一下这个Chassis_detail是什么:apollo_cidi/modules/canbus/proto/chass...

2019-03-26 16:31:52 4060 6

原创 输入三个数,操作一任选两个数加一,操作二任选一个数加二。问至少操作几次可以使三个数相等?

#include&lt;iostream&gt;#include&lt;algorithm&gt;using namespace std;void test(int x,int y,int z){ int num1,num2,num3,count; num1 = y-x; num2 = z-y; num3 = z-x; if(x&lt;0||x&gt;100 || y...

2018-04-19 21:28:25 1216 1

原创 C\C++头文件中的#pragma

编写头文件的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作。一 message参数。 它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为:      #pragma message("消息文本")  当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。  当我们在程序中定义了许多宏来控制源代码版本的时候,我...

2018-04-02 00:58:34 1010

原创 c/c++中关于变量存储的位置

我们先看一下内存区域的分配bss段 :一个程序本质上是由bss段、data段、text段三个组成的,bss段通常是指用来存放程序中 未初始化的全局变量、静态变量(全局变量未初始化时默认为0)的一块内存区域。数据段 :通常是指用来存放程序中 初始化后的全局变量和静态变量。代码段 :通常是指用来存放程序中 代码和常量。堆(heap):通常是指用来存放程序中 进程运行时被动态分配的内存...

2018-03-23 17:13:06 513

c++智能指针

c++中关于auto_ptr指针的详细讲解,指针的含义以及用法还有架构都清晰的给出了解释的操作

2019-02-24

空空如也

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

TA关注的人

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