![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
program
XuSheng.Mrs
这个作者很懒,什么都没留下…
展开
-
计算岛屿的数量
给一个二维数组,元素只有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 · 513 阅读 · 0 评论 -
c++11实现简单的生产者消费者任务模型
生产者消费者模型是多线程同步的一个典型例子,运用锁和条件变量对两个线程做同步处理.#include <iostream> #include <queue>#include <thread> #include <mutex> #include <unistd.h> #include <condition_variable> using namespace原创 2021-04-02 23:44:32 · 499 阅读 · 0 评论 -
c++11实现一个线程池,多任务的分配与调度
什么是线程池?线程池是一种线程使用模式.线程过多或者频繁的创建和销毁线程会带来调度开销,进而影响缓存局部性和整体性能.而线程池维护着多个线程,等待着管理器分配可并发执行的任务,这避免了在处理短时间任务时创建与销毁线程的代价,以及保证了线程的可复用性.线程迟不仅能保证内核的充分利用,还能防止过分调度.线程池原理预先创建预定数量的线程,将多个任务加入到任务队列,类似于生产者消费者,多个线程相当于消费者,一个任务队列充当生产者.当任务队列被塞入任务时,线程们就去竞争这些任务,但当每次只有一个线程能够得原创 2021-04-01 22:28:57 · 2514 阅读 · 0 评论 -
c++给定一个数组,里面的元素都各不相同,判断其是否为一个二叉搜索树的后序遍历
二叉搜索树:根节点的值大于左子节点的值,小于右子节点的值,并且其左右子树也是一个二叉搜索树;后序遍历:左->右->根思路就是:数组中最后一个元素显示就是根节点,然后根据大小关系,把数组分为左右子树,再做遍历即可;bool isBstPost(std::vector<int>& array) { int length = array.size(); if(length == 0) return false; int原创 2021-03-30 21:16:33 · 258 阅读 · 0 评论 -
利用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 · 214 阅读 · 0 评论 -
给定一个整数数组,数组中有正负数随机分布,要求将正数负数间隔分布,且不改变其原来的顺序。
给定一个整数数组,数组中有正负数随机分布,要求将正数负数间隔分布,且不改变其原来的顺序。例如【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 · 594 阅读 · 0 评论 -
两个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 · 1470 阅读 · 0 评论 -
递归反转单链表
采用递归实现这个过程,先找到链表的最后一个节点然后向前返回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 · 126 阅读 · 0 评论 -
考虑可选的 virtual functions(虚拟函数)的替代方法
现在你工作在一个视频游戏上,你在游戏中为角色设计了一个 hierarchy(继承体系)。你的游戏中有着变化多端的恶劣环境,角色被伤害或者其它的健康状态降低的情况并不罕见。因此你决定提供一个 member function(成员函数)healthValue,它返回一个象征角色健康状况如何的整数。因为不同的角色计算健康值的方法可能不同,将 healthValue 声明为 virtual(虚拟)似乎是显而易见的设计选择:class GameCharacter {public: virtual int原创 2020-09-08 08:54:19 · 171 阅读 · 0 评论 -
c++异常安全的代码
假设有一个类,代表有背景图像的GUI菜单,这个类被设计成在多线程环境中使用,所以它有一个用于并行控制的互斥体(mutex):class PrettyMenu {public: ... void changeBackground(std::istream& imgSrc); // change background ... // imageprivate:原创 2020-09-03 15:52:11 · 267 阅读 · 0 评论 -
c++减少函数返回值为引用
首先函数参数作为引用来替代值传递会提高效率这是必然的,那么函数的返回值可以是引用吗?先看一个代表有理数的类,包含一个将两个有理数相乘的函数:class Rational {public: Rational(int numerator = 0, int denominator = 1); ...private: int n, d; frien原创 2020-09-01 10:59:55 · 185 阅读 · 0 评论 -
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 · 209 阅读 · 0 评论 -
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 · 907 阅读 · 0 评论 -
QT制作视频播放器
应项目需要,我之前用ffmpeg合成的视频需要用一个界面播放,思来想去自学QT来做这个工作。首先我系统是ubuton16.0.4,先安装QT工具,然后直接开发。建议新来的朋友先自学一下QT的LayOut布局设计,使用布局会让你的控件更整齐,而且放在布局里的控件在设计好之后还可以跟着窗口的伸缩而伸缩,十分好用。网上很多将界面布局都用的代码来生成控件,这对QT初学者很不友好,我推荐一篇文章教大家用...原创 2019-08-23 15:37:05 · 2870 阅读 · 5 评论 -
输入三个数,操作一任选两个数加一,操作二任选一个数加二。问至少操作几次可以使三个数相等?
#include<iostream>#include<algorithm>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<0||x>100 || y...原创 2018-04-19 21:28:25 · 1152 阅读 · 1 评论