- 博客(17)
- 收藏
- 关注
原创 C++使用包装器和适配器实现回调函数
本篇文章至此,总的来说我们设计的核心理念是合适的事情交给合适的人去做,每个人只需要完成自己该完成的事情即可。我是一个厨师我的任务把菜做好就行了,你不会还等着我给你去端盘子洗盘子吧。
2024-04-11 13:47:11
467
1
原创 vector中删除元素并且迭代器不失效
我把resize函数换成了erase函数就解决这个问题了,erase会使它之后的迭代器失效,那我后面没用元素了就随便它失效,无所谓。我要删除6,2,3这三个元素,那么我将要删除的元素和最后一个元素的值调换一下,并且删除最后一个迭代器的值,这样就可以达到效果了。结果也很对,但是有一个问题,我移到最后的元素始终占着内存,这样会使一些不必要的内存被占用。昨天看到网上有人提出了这个问题,怎么删除容器的一个元素,并且迭代器不会失效,我想到了如下的方法。在一年前刚开始接触容器的时候经常写一些错误的代码,比如。
2023-10-05 20:40:48
163
原创 linux系统编程出现段错误调试方案
包含但不仅限于以下内容非法内存访问:这是最常见的段错误原因之一。它包括:* 解引用空指针:当代码试图访问一个空指针所指向的内存时,会导致段错误。* 数组越界访问:当代码试图访问数组的超出边界范围的元素时,会导致段错误。* 试图写入只读内存:当代码试图对只读内存进行写操作时,会导致段错误。栈溢出:当递归调用层数过多或者函数调用链太深时,会导致栈溢出,也会引发段错误。使用释放的内存:当代码试图使用已被释放的内存时,会导致段错误。
2023-09-07 21:55:12
822
原创 精题分享!!
给你一个 无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例 1:输入:intervals = [[1,3],[6,9]], newInterval = [2,5]输出:[[1,5],[6,9]]示例 2:输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
2023-08-31 11:10:30
146
原创 还是动态规划
具体来说,位置 (row, col) 的下一个元素应当是 (row + 1, col - 1)、(row + 1, col) 或者 (row + 1, col + 1)。你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。这两个题好像没有直接联系,但是这里总结的就是遇到寻路,寻值这种问题,需要牵扯到之前的选择的问题,我们都可以枚举每一个位置为最后一个位置,然后去求解答案。
2023-07-14 20:00:54
157
1
原创 dp模拟影响
给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后,每天 给一个新的人 分享 秘密。这个题可以这样思考,每一个人知道了秘密之后只能影响后面的人,然后他影响的范围有限,那么这个题就很好解决了,看实例,第一个人的影响最多到第四天,然后他第三天开始才能说出秘密,所以他的影响就是2 – 3,然后我们在遍历第二个人的影响,依次类推。第 5 天:A 忘记了秘密,B 把秘密分享给一个新的人 D。第 6 天:B 把秘密分享给 E,C 把秘密分享给 F。第 2 天:A 是唯一一个知道秘密的人。
2023-06-10 10:35:31
97
原创 综合的dp(dp + 前缀和 + 后缀长)
然后就是动态规划求解,这里我们很容易能想到推导的过程,f[i][j]是代表i – j以j为结尾,最后一段分割为i – j这样有多少种。lcp的作用是求 [ i : ] 和 [ j : ] 有多少一样的字符,比如123124,当i = 0, j = 3, 那么他们相等的就只有 1 和 2, 3!= 4, 所以lcp[0][3] = 2;你写下了若干 正整数 ,并将它们连接成了一个字符串 num。总的来说这个题真的是难度有点大,但是各种知识点混合在一起学习还是很有用的,是一个值得训练的好题。
2023-06-10 08:57:25
171
原创 利用互斥锁和条件变量实现生产者消费模型
详细解释以下消费者的函数之前我们得先了解 pthread_cond_wait()函数,这个函数不是普通的等待信号发送过来就启动,这个函数的正确执行次序是,1.先解锁 2.等待条件 3.条件触发并且上锁 我们先来证明这个。这里就是创建两个线程,两个线程函数几乎一样,先上锁然后输出日志,如果pthread_cond_wait()函数是我说的那样的话,就一定会同时输出两个等待的日志,我们来试试。生产者的代码没什么好说的,就是上锁然后普通的加入数据。之后就是普通的获取元素,然后删除元素,解锁,输出日志。
2023-05-25 08:21:45
202
1
原创 linux多线程参数的传递
结果都是5,这里出现这种结果的原因就是你创建线程是按照顺序创建的,但是你的mainfunc()函数不一定是创建一个就输出一个,所以都是等主线程都执行完毕了,var这个时候已经等于5了,所以你最后输出的结果那肯定都是5。通常指针都是存地址,但是我这里我想传值进去,因为如果传地址那不就是和前面的全局变量没有什么区别了,所以这里我们要传值进去,就得强制类型转化一下。这样就都分开了,顺序不一样是正常的,因为编译器的优化问题,所以顺序不一样很正常,我们只需要知道结果是每一个线程都知道了自己准确的编号了。
2023-05-03 19:53:30
1332
2
原创 记录动态规划(三)
这题明显的组合形式的划分,所以这里用dfs,其实就是选和不选的问题,只不过我们选之前得知道我们选的是不是回文字符串,所以我们还需要一个二维数组去记录是不是回文字符串,为什么是二维,因为dp[i][j] 这个代表i -- j是不是字符串。假如s[i] == t[j] 那么我们就两个选择,一个是两个都选那么就转移到了上一个状态也就是i - 1 和 j - 1,二是不选i,为什么是不选i而不是不选j,因为你是从s中凑出t,所以对于s的字符你是有选择性的,所以转移的状态就是i - 1 和 j。
2023-04-19 21:28:23
227
原创 前缀和问题举例详解
这里面的题目都源于力扣。其中我给出的代码第一个函数视为主函数,其中用了一些stl库容器 看见vector当作数组即可,unordered_map是一种关联容器,存储基于键值和映射组成的元素,即key-value。具体来说其实我们就是看见有连续二字或者题目中暗示是连续的求解,这样我们得想起来前缀和的思想。总结了一些题525. 连续数组力扣974. 和可被 K 整除的子数组力扣1371. 每个元音包含偶数次的最长子字符串力扣1542. 找出最长的超赞子字符串力扣。
2023-03-31 09:26:52
465
原创 DFS(深度优先遍历)举例详解
这里面用了一些stl的东西,如果看见vector<T>这种,把他当一维数组就行,如果看见了vector<vector<T>> 把他当做一个二维数组即可。如果实在看不懂一些代码的话,就点击链接进入题解有其他语言版本的题解,找到自己熟悉的语言题解。然后我给的代码没有看见主函数的话,就把第一个函数当做主函数就行。
2023-03-25 08:28:53
2078
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人