c++
溯夜流云
这个作者很懒,什么都没留下…
展开
-
用一个随机数函数去生成另一个随机数函数:rand(a)生成rand(b)以及rand(a,b) 生成rand(c,d)
让我们把这个问题泛化一下,从特殊到一般。现在我给你两个生成随机数的函数Randa, Randb。Randa和Randb分别产生0到a的随机数和0到b的随机数,a,b不相等 (相等就没必要做转换了)。现在让你用Randa实现Randb。首先当 a>b ,时,最简单的就是通过:int x=a;while(x>b){ x=randA();}return x;即只输出在0-b范围内的情况,但是对于a,b相差很大的情况,会导致循环随机多次,时间消耗太多,做了太多次...原创 2021-03-22 20:59:55 · 1568 阅读 · 0 评论 -
临界区和互斥量的区别
临界区和互斥锁的区别1、临界区只能用于对象在同一进程里线程间的互斥访问;互斥体可以用于对象进程间或线程间的互斥访问。2、临界区是非内核对象,只在用户态进行锁操作,速度快;互斥体是内核对象,在核心态进行锁操作,速度慢。3、临界区和互斥体在Windows平台都下可用;Linux下只有互斥体可用...原创 2021-03-22 13:56:23 · 837 阅读 · 0 评论 -
动态规划经典题目:最大连续子序列和、最大不连续子序列和
1.最大连续子序列和: 记数组为nums思路:记录dp[i]为i位置结尾的最大连续子序列和则有dp[i]=dp[i-1]>0?(dp[i-1]+nums[i]):nums[i];然后求dp数组的max即为最终结果1.最大不连续子序列和: 记数组为nums思路:记录dp[i]为i位置的最大不连续子序列和则有两种情况dp[i]=dp[i-1] 或者dp[i]=dp[i-2]+nums[i] 即不选或者选择当前位置那么整理为dp[i]=m...原创 2021-03-13 13:40:58 · 1967 阅读 · 0 评论 -
程序员面试指南(动态规划部分)5:最长公共子串
最长公共子串原创 2021-03-11 20:29:26 · 97 阅读 · 0 评论 -
程序员面试指南(动态规划部分)4:地下城游戏
class Solution {public: int calculateMinimumHP(vector<vector<int>>& dungeon) { //思路:需要计算最少所需的健康点,可以从最后的位置向前推 //因为最后位置所需的最少健康点是确定的 //由于骑士可以向右和向下,那么倒过来就是向左和向上推 //记dp[i][j]为i,j位置所需的最少血量,那么 //dp[i][j]=min{右边的最小,下边的最小}-dungeon[i][j]...原创 2021-03-11 19:38:14 · 139 阅读 · 0 评论 -
c++基础编程:实现常用数据结构或功能
1.给定一个数据类型,写它的赋值构造函数:例如:实现Stringclass MyString{public: MyString(char *data = nullptr); MyString(const MyString &str); ~MyString();private: char * myData;};MyString& MyString::operator =(const MyString &str) //赋值运算符{ //关注点:1.需...原创 2021-03-11 16:33:35 · 123 阅读 · 0 评论 -
剑指offer阅读 1:sizeof空类型会产生的结果
1.如果只是简单的空类型,那么结果为1,因为空类型的实例在内存中至少占用一个字节的空间,否则就无法使用了。2.如果包含构造和析构函数呢? 还是1,函数只需要知道地址,跟实例无关。3.如果有虚函数呢? 32位下为4, 64位下为8 ,因为虚函数的存在,实例必须有虚函数指针。...原创 2021-03-11 15:49:43 · 92 阅读 · 0 评论 -
面试算法题分类
1.自己复现经典数据结构或算法: 复现vector、string等数据结构 复现堆排序等经典算法这块更偏向考察基础知识的熟悉程度。2.其余算法这块更考察算法逻辑的能力和对不同数据结构的运用能力。...原创 2021-03-08 14:46:33 · 102 阅读 · 0 评论 -
c++封装给c#调用相关:
c#与c++数据类型对应关系:https://www.cnblogs.com/yiki/archive/2008/10/29/1321848.html详细资料:https://www.cnblogs.com/cheng2015/p/14049082.htmlC#调用C++编写的DLL函数, 以及各种类型的参数传递https://blog.csdn.net/lanshahewu/article/details/106762995...原创 2021-03-08 14:13:51 · 248 阅读 · 0 评论 -
c++面试提问查漏补缺
1.回调函数是什么,原理?因为可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。它只需知道存在一个具有特定原型和限制条件的被调用函数。简而言之,回调函数就是允许用户把需要调用的函数的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。回调函数机制:1、定义一个函数(普通函数即可);2、将此函数的地址注册给调用者;3、特定的事件或条件发生时,调用者使用函数指针调用回调函数。注:为什么要特定事件或条件发生?不应该随时都可以调用...原创 2021-03-06 16:25:26 · 106 阅读 · 0 评论 -
动态规划例题 1:交错字符串
思路:用dp[i][j] 表示s1的前i个与s2的前j个交错成s3的前i+j个的结果(true或false)初始状态dp[0][0]=true ,零和零组成零,没毛病class Solution {public: bool isInterleave(string s1, string s2, string s3) { int len1=s1.length(); int len2=s2.length(); int len3...原创 2021-02-22 20:22:00 · 156 阅读 · 0 评论 -
算法题中常见的几种输入的写法:
1.按行输入,第一行是数据的总个数或者总行数,后续是数据(每行中的数据通过空格划分,行与行之间通过换行区分): int nums = 0; cin >> nums; vector<int> wood; int a = 0; for (int i = 0; i < nums; i++) //输入 { cin >> a; wood.push_back(a); }2.按行输入,第一行是数据的总个数或者总行数,后续是数据(每行中的数据可能包原创 2021-02-17 17:23:42 · 1911 阅读 · 1 评论 -
c++中的左值与右值问题:
1、左值和右值的概念C++中左值(lvalue)和右值(rvalue)是比较基础的概念,虽然平常几乎用不到,但C++11之后变得十分重要,它是理解 move/forward 等新语义的基础。左值与右值这两个概念是从 C 中传承而来的,左值指既能够出现在等号左边,也能出现在等号右边的变量;右值则是只能出现在等号右边的变量。int a; // a 为左值a = 3; // 3 为右值左值是可寻址的变量,有持久性; 右值一般是不可寻址的常量,或在表达式求值过程中创建的无名临时对象,短暂性的原创 2021-02-01 17:57:14 · 217 阅读 · 0 评论 -
深信服面试准备:C/C++软件开发工程师(云计算、网络安全方向)
9.重载和重写的区别:重载是静态多态,重写是动态多态只不过重载是通过同名函数的不同参数类型,参数个数实现不同的功能,而且这是在编译的过程中发生的;重写是通过虚函数的形式实现不同对象同名函数实现不同的功能,在程序运行的过程中发生。10.new,malloc,free和delete的区别:首先,new/delete是C++的关键字,而malloc/free是C语言的库函数,后者使用必须指明申请内存空间的大小,对于类类型的对象,后者不会调用构造函数和析构函数malloc/free是..原创 2020-12-17 13:56:13 · 397 阅读 · 2 评论 -
深信服面试准备:C/C++软件开发工程师(云计算、网络安全方向)
1.c++有哪些容器,介绍一下。说说你对STL的了解,等等。 1.序列式:vector(动态数组,当前大小到达数组容量时进行2倍扩容,以此实现动态数组的效果)、list(双向链表)、 deque(双端队列)(将固定大小的多个数组用指针连接,以此实现首位插入和删除的功能) 2.关联式:(无序)unordered_map/set (底层是hash),特点是查找的时间复杂度是O(1)(有序)map/set (底层是红黑树)引申:为什么是红黑树不是平衡二叉树...原创 2020-12-17 12:55:24 · 1735 阅读 · 0 评论 -
力扣题:1139. 最大的以 1 为边界的正方形
思路:1 直接暴力法,每到一个新的节点就判断以它为左上角是否有正方形,在判断的过程中需要考虑多个条件,及时break减少时间消耗理论上该方法的时间复杂度为O(n*m)*min(n,m) (因为正方形长度最大也就原始网格长宽中最小的一个) ,空间复杂度为O(1)2 考虑到主要的耗时在于判断当前节点是否能构成正方形,可以考虑记录每个节点上下左右为1的边的状态,这样后续节点的判断只需要简单的加减即可。思路进一步可以简化为只需要记录每个节点左边连续1的个数和上边连续1的个数即可...原创 2020-12-12 19:09:25 · 149 阅读 · 0 评论 -
力扣题:634寻找错位排列
首先直接暴力的时间复杂度很大,下面先贴一个暴力法的结果,然后再是动态规划class Solution {public: int num=0; void dfs(int &sum,int &cur,vector<int> &re,vector<int> &der) { // if(cur>=re.size()) return; if(sum==re.size()-1&&..原创 2020-12-12 15:55:52 · 207 阅读 · 0 评论 -
值传递与引用传递的区别及影响
值传递: (原变量,什么都不带)形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出,除非再return出去。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。指针传递: (前面加*)形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作引用传递:(前面加&)形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函..原创 2020-12-10 22:52:04 · 435 阅读 · 0 评论 -
算法:回溯+剪枝
回溯算法的定义:在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,总是先判断该结点是否肯定不包含问题的解。如果肯定不包含,则跳过对以该结点为根的子树的系统搜索,逐层向其祖先结点回溯。否则,进入该子树,继续按深度优先的策略进行搜索。回溯法在用来求问题的所有解时,要回溯到根,且根结点的所有子树都已被搜索遍才结束。而回溯法在用来求问题的任一解时,只要搜索到问题的一个解就可以结束。解空间树:依据待解决问题的特性,用树结构表示问题的解结构、用叶子表原创 2020-12-09 14:15:10 · 3760 阅读 · 0 评论 -
力扣解题 1014. 最佳观光组合 有感:
对于设计多层循环寻找多个数的和差,乘积,除数之类的最值问题:可以设计一个local记录前几个数的最值,然后用少几层或者单层循环更新local和当前计算的最值,最终得到结果。注意可以直接一起计算的放到一起,不要被题目迷惑,例如下题的A[i]+i ,A[j]-j 其实是两个整体如果是暴力的话就是双层的循环了:class Solution {public: int maxScoreSightseeingPair(vector<int>& A)...原创 2020-12-08 22:57:36 · 95 阅读 · 0 评论 -
动态规划经典例题:最长公共子序列相关 、滑动窗口方法
最长公共子序列,可以拓展到非字符串的结构,如数组等,毕竟其实字符串也可以理解为字符数组例题:给两个整数数组A和B,返回两个数组中公共的、长度最长的子数组的长度。示例0:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出:3解释:长度最长的公共子数组是 [3, 2, 1] 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-length-of-repeated-subarray著作权归...原创 2020-12-07 00:39:18 · 596 阅读 · 0 评论 -
面试常考问题:LRU(最近最久未使用)缓存策略的代码实现
主要思路:假设缓存有固定容量,在缓存头部的意味着是最近最久没使用的可以丢弃,在缓存尾部是刚刚使用过的对于读取缓存:get操作 (有则读取,并将该内容放到缓存尾部,代表刚刚使用;无则返回固定的值)对于写入缓存:put操作(有则更新,并将内容放到缓存尾部,代表刚刚使用;无则判断容量是否满,没满直接插入,满了就删除缓存头部再插入)这里想要两者都是O(1)的时间复杂度,可以考虑通过一个双向链表list和一个unordered_map以及一个最大容量max来实现其中list存储键值..原创 2020-12-06 16:53:21 · 181 阅读 · 0 评论 -
c++中STL的迭代器失效问题(力扣编程遇到的)
1.STL中的容器分类1.1序列式:vector(动态数组)、list(双向链表)、deque(双端队列)以及基于双端队列的stack(栈)、queue(队)1.2关联式:map/set 、multimap/set(有序关联式:红黑树)unordered_map/set 、unodered_multimap/set (无序关联式:哈希表)根据实际存储的分类可以分为顺序存储和链式存储:其中vector和deque都是顺序存储,其各个元素的地址是前后相连的,...原创 2020-12-06 16:24:23 · 525 阅读 · 0 评论 -
平面向量及空间向量间角度的计算
平面向量(平面上的直线)存在关系:如果根据斜率什么的判断可能会涉及到对斜率计算结果精确度的判断,这就很麻烦,所以并不推荐用斜率计算更推荐的是使用向量的关系;假设向量A(a1,a2)向量B(b1,b2)平行:共线:a1*b1=a2*b2 ,这里就不需要担心计算斜率带来的精度的问题了相交(则计算角度):代码实现:如下文贴出的空间向量计算的实现空间向量(空间直线)存在关系:平行:共线:相交(则计算角度):异面:代码:利用Eigen库计算两个向量的旋...原创 2020-12-05 18:45:47 · 3173 阅读 · 0 评论 -
C++中 的位操作及其部分经典运用
1.位操作的介绍位操作有:与:&或:|取反:~取反符号与非!的区别:!是逻辑运算符(与||,&&是一类符号),表示逻辑取反,可以把非0值变成0,把0值变为1 ~是位运算符(与|,&是一类符号),表示按位取反,在数值的二进制表示上,将0变为1,将1变为0异或:^位移操作:(左移:<< , 右移:>>)位操作只能用于整形数据,对float和double类型进行位操作会被编译器报错需要注意的是由于编...原创 2020-12-05 00:35:49 · 1015 阅读 · 0 评论 -
算法中前缀和的运用
前缀和定义: 对当前位置的前面所有位置的和或者差之类的计算,这样相当于空间换取时间,相当于,对后续位置的计算只需要在上次计算的基础上加上很少的计算即可。这么看似乎思路上很像动态规划,但是动态规划在前后状态的关系上比前缀和更加紧密或者说可能比前缀和更加复杂,前缀和可以算是动态规划中应用窄的一部分。举例子:一维的前缀和:对数组a[n] 一共n个数,输入:整数x范围:(1到n)输出:前x个数的和思路:利用一个数组b[n],记录每次前x个数的和,这样查询的时候只需要O(...原创 2020-12-03 21:27:39 · 331 阅读 · 0 评论 -
力扣出现概率最高的前一百道简单题总结
前景:力扣里所谓的简单题并不一定简单,很多的官方解题思路都是很巧妙的。练题过程中涉及到的一些知识点:基础的:STL相关的一系列操作:其中用的最多的就是vector和unordered_map ,stack偶尔也会用到,优先队列(priority_queue)也有用到过,还有一些对字符串string的操作(可以find,push_back等)1.对数组和字符串的一些巧妙方法:例如反转左右部分再整体反转等等;2.vector和map的结合使用:例如利用map中查找元素的时间复杂度为...原创 2020-11-27 18:01:17 · 385 阅读 · 0 评论 -
c++中自定义排序函数的实现示例+lambda表达式的基础运用
在实际编程或者工程中会经常遇到排序问题,而且很多情况下的排序不仅仅是按大小排序的,有可能按字典顺序排名称;或者多个排序规则:(例如:考试成绩排名:先按成绩排,然后相同成绩学号小的排在前面);或者规定必须按照其他数据中出现的顺序排等等各种各样的排序规则。这个时候系统自带的排序就很难或者说实现起来会很麻烦,可能需要排序好几次。那么就可以考虑自定义排序函数,来实现排序的需求。C++11后STL中自带sort函数,sort(1, 2 , 3)参数一二分别为数据结构需要排序的范围(开...原创 2020-11-22 22:08:34 · 2544 阅读 · 0 评论 -
多线程编程初探1:互斥量、互斥锁(mutex)和条件变量及异步编程
1.定义:互斥锁是为了解决在多线程访问共享资源时,多个线程同时对共享资源操作产生的冲突而提出的一种解决方法。在执行时,哪个线程持有互斥锁,并对共享资源成功加锁后,才能对共享资源进行操作,此时其它线程不能对共享资源进行操作。只有在持有锁的线程将锁解锁释放后,其它线程才能进行抢锁加锁操作。互斥锁的主要作用就是用来解决多线程对共享资源的竞争问题。但,应注意:同一时刻,只能有一个线程持有该锁。当A线程对某个全局变量加锁访问,B在访问前尝试加锁,拿不到锁,B阻塞。(可以理解为对普通的mu.原创 2020-10-28 16:11:28 · 959 阅读 · 0 评论 -
c++下的socket编程
1.所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口 。(摘自百度百科)以下摘自https://blog.csdn.net/pashanhu6402/article/details/96428887Socket是什么呢?Socket是应用...原创 2020-09-30 22:19:22 · 1164 阅读 · 0 评论 -
mihuyo笔试查漏补缺
1.首先是一堆考察基础的不定项选择2.编程题两道,一道是矩阵的顺时针打印#include <vector>#include <iostream>#include <opencv2/opencv.hpp> // Include OpenCV APIusing namespace cv;using namespace std;#include <iostream>#include <vector>using namespa原创 2020-09-20 20:29:00 · 396 阅读 · 0 评论 -
海康电话摸底面,查漏补缺
1.问了一道内存管理的题目:(内存中有几个区域,分别用来干什么)在C++中,内存分成5个区,由高地址到低地址依次是: 栈:栈的内存地址是连续的且被一一记录的。内存由编译器在需要时自动分配和释放。通常用来存储局部变量和函数参数。(为运行函数而分配的局部变量(包括局部const)、函数参数、返回地址等存放在栈区)。栈运算分配内置于处理器的指令集中,效率很高,但是分配的内存容量有限。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。 堆:堆里面申原创 2020-09-19 00:48:26 · 111 阅读 · 0 评论 -
C++:计算机网络知识点(整体思维导图)
目前正在制作中,材料基于b站的王道计算机网络课程。有需要的可以留言邮箱+需要的文件格式(PDF/图片/.pos(可用wps修改)/.mm(可用freemind修改)),做好了我会一个个发给你们。原创 2020-09-15 17:22:57 · 139 阅读 · 0 评论 -
C++:操作系统知识点(整体思维导图)
目前正在制作中,材料基于b站的王道操作系统课程。有需要的可以留言邮箱+需要的文件格式(PDF/图片/.pos(可用wps修改)/.mm(可用freemind修改)),做好了我会一个个发给你们。原创 2020-09-13 13:41:10 · 223 阅读 · 2 评论 -
C++复习之路25:父类与子类指针转换,sizeof相关:
构造、析构函数相关,参看这里原创 2020-09-12 12:21:33 · 491 阅读 · 0 评论 -
C++复习之路:算法与数据结构相关 2:top(k)问题,k个最值,k个出现频率最高的元素
一般是求k个最大值、最小值的情况类似。解法有很多:1:直接全部排序(当数据量比较大的时候,最傻最耗费资源)2.利用快排的思想:先进行一趟快排,假设标记位置的下标为index,那么当index==k时index左边的为前k个数,只需对这k个数排序即可;如果index>K,那么第k个大小的值在index的左边,算法对index左边再次快排;如果index<K,那么第k个大小的值在index的右边,算法对index左边再次快排;直到index==k找到第k个大小..原创 2020-07-29 17:35:12 · 387 阅读 · 0 评论 -
C++复习之路24:计算机网络相关4:
1.从浏览器输入URL到执行的全过程一、进行域名解析(获取IP地址)域名解析过程: 1、浏览器搜索自己的DNS缓存,缓存中维护了一张域名和IP地址的对应表 2、若没有则搜索操作系统的DNS缓存 3、若没有则操作系统将域名发送到本地域名服务器,本地域名服务器在自己的DNS缓存查找(递归查询) 4、若没有则通过以下方式查找(递归查询/迭代查询) 本地域名服务器向根域名服务器发送请求,根域名服务器返回com/net/cn/org等等的域顶级服务器域名地址 本地原创 2020-09-06 01:24:27 · 1938 阅读 · 0 评论 -
C++复习之路23:计算机网络相关3:
1.TDP与UDP的区别:1、连接方面区别TCP面向连接(如打电话要先拨号建立连接)。UDP是无连接的,即发送数据之前不需要建立连接。2、安全方面的区别TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达。UDP尽最大努力交付,即不保证可靠交付。3、传输效率的区别TCP传输效率相对较低。UDP传输效率高,适用于对高速传输和实时性有较高的通信或广播通信。4、连接对象数量的区别TCP连接只能是点到点、一对一的。UDP支持一对一,一对多原创 2020-09-05 18:50:53 · 676 阅读 · 0 评论 -
C++复习之路22:Linux的一些常用知识1:
1.Linux的I/O模型介绍以及同步异步阻塞非阻塞的区别同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回这个期间客户端浏览器不能干任何事异步:异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。例如 ajax请求(异步):请求通过事件..原创 2020-09-04 23:02:14 · 96 阅读 · 0 评论 -
PCL1.8+Win10+VS2017+intel realsense获取平面点云的最小外接矩形
如上图所示,计算某个区域的平面点云的最小外接矩形。需要注意的是这里是针对平面点云而言的。具体步骤:方法1:利用PCL自带的AABB或OBB最小外接矩形的api即可(但貌似并不是严密贴合的最小外接矩形)方法2:将平面点云transform到与深度相机垂直方向(这就意味着平面点云中点的z值相同),此时可以视平面点云为二维图像,使用opencv中计算点集的最小外接矩形 :RotatedRect point_box = minAreaRect(points);//点集的最小外接旋转矩形。..原创 2020-09-04 17:14:08 · 1577 阅读 · 1 评论