- 博客(414)
- 资源 (1)
- 收藏
- 关注
原创 C++Primer学习笔记:第1章 开始
本博客为阅读《C++ Primer》(第5版)的读书笔记第1章 开始在大多数系统中,main的返回值被用来指示状态。返回值0表示成功,非0的返回值的含义由系统定义,通常用来指出错误类型。在Unix中程序运行以后返回值保存在$?中(必须在刚运行后打印输出)编译时可能需要加上-std=c++11打开对C++11标准的支持,一般会加上-Wall参数,可以对有问题的程序结构发出警告如果想要通过打印语句进行调试,一定要及时使用endl操纵符刷新流,否则如果程序崩溃,可能无法得到输出信息,从而导致关于程序崩溃
2020-10-26 19:48:58 316 2
原创 Leetcode 第425场周赛分析总结
题目描述看完发现不是非常trivial,看了一眼数据范围,觉得不要多想直接暴力好了。闪过念头不会把数据范围变成1e5就是第三题吧,AC之后去看了一眼发现不是松了一口气。简单想了一下感觉可能和滑动窗口有关,但是却没有发现单调性,没有什么思路。下来认真看了灵神的视频,发现果真复杂。发现自己目前存在一个问题,对于不能一眼看出思路的算法题会产生抗拒,不愿意静下心认真思考解决的方案,似乎遇到困难就会缩起来。这可能是之前刷题的时候总是苛求自己,导致闪回,遇到自己能力的边界不是一件可耻的事情。
2024-11-30 12:22:36 1153
原创 Bazel项目使用网络库libhv
记得在2023年末,我还在腾讯实习时,偶然听了一场关于使用Bazel替代CMake管理C++项目的技术讲座。了解到在大公司内部,大家同样不堪CMake的纷繁复杂,更加青睐语义直观、支持多语言、拥有更高一致性的Bazel。这激发了我对Bazel的兴趣。,便萌生了为这个茁壮成长的网络库添加Bazel编译支持的想法。经过一段时间的学习和尝试,终于磕磕绊绊地完成了这项工作,并提交了相关的。在这里,简单介绍一下如何在自己的Bazel项目中使用网络库libhv。幸运的是,得到了libhv开发者的支持,这让我非常开心。
2024-07-26 17:51:36 507
原创 rpm打包新手入门
RPM(Red Hat Package Manager)是一种软件包管理工具,主要用于Red Hat及其衍生发行版如Fedora、CentOS等。RPM可以帮助用户方便地安装、升级、删除软件包。通过学习rpm包的相关知识,我们可以将自己的软件打包成rpm包,以便于在基于Red Hat的Linux发行版(如Fedora、CentOS等)上进行分发和安装。
2023-10-11 15:08:06 611
原创 C++ 条件变量的使用
并发编程纷繁复杂,其中用于线程同步的主要工具——条件变量,虽然精悍,但是要想正确灵活的运用却并不容易。希望大家看完下面的介绍能够得到想要的答案。
2022-11-16 13:03:51 1617 3
原创 C++ map/unordered_map元素类型std::pair<const key_type, mapped_type>陷阱
我们要千万小心`map`和`unordered_map`的元素类型为`std::pair`,如果忘记`const`可能会不小心产生拷贝操作,不仅仅会带来性能损耗,而且可能会产生RuntimeError。
2022-07-14 16:16:46 605
原创 C++ 工具函数库
在写一些大型项目的过程中经常需要一些工具函数,例如获取随机数、计时器、打印函数、重要常量(如最大值)等,由于每一个工程都自己手动实现一个实在是太傻,我将其总结放入一个文件中。.........
2022-07-09 10:33:31 617
原创 C++高效集合数据结构设计
在复杂算法实现过程中我们经常会需要一个高效的集合数据结构,支持常数级别的增、删、查,以及随机返回、遍历,最好还能够支持交集、并集、子集操作
2022-07-04 16:09:24 769
原创 每日一题:449. 序列化和反序列化二叉搜索树
题目分析题目链接:449. 序列化和反序列化二叉搜索树觉得序列化很简单,前序遍历、后序遍历、中序遍历、层序遍历等等。其中得到前序遍历和后序遍历是可以通过递归解法反序列化的,觉得这样子做有点复杂。就想着可不可以一次遍历。一次遍历的问题在于不知道哪里子孩子为空(因为没有保存子孩子为空的情况)。所以我就针对性地让空节点的值为-1。为了方便从字符串中读取数字,使用了C++中的istringstream。整体的实现还是比较简洁高效的。实现代码class Codec {public: // Enco
2022-05-11 21:36:45 225
原创 C++读写锁造成死锁
C++14支持std::shared_timed_mutexC++17支持std::shared_mutex前者相比后者支持的操作更多,但是后者相对性能更好。使用std::lock_guard<std::shared_mutex>和std::unique_lock<std::shared_mutex>互斥访问使用std::shared_lock<std::shared_mutex>实现共享访问(C++14),使用方式和std::unique_lock相同多个
2022-05-10 19:25:14 1245
原创 C++ 单例模式 call_once : terminate called after throwing an instance of ‘std::system_error‘
使用C++11中的call_once实现单例模式,解决出现的 'terminate called after throwing an instance of ‘std::system_error'问题
2022-04-29 11:52:08 5399 7
原创 Clion远程部署和运行
绪论作为Clion的忠实粉丝,现在的我的几乎所有的coding都是通过Clion完成。因为需要在服务器上进行开发,又离不开Clion,就了解了如何通过Clion远程部署和开发。主要是借鉴了博客:使用Clion优雅的完全远程自动同步和远程调试c++。如果我哪里没有讲清楚可以去借鉴一下这篇博客。我们的目标是在本地进行编码,运行在服务器上。设置远程工具链更新/安装cmake借鉴了博客:在Linux上安装其他版本的cmake 或 升级cmake首先我们需要保证服务器上的cmake版本至少为3.19,否
2022-04-20 15:05:54 2117 1
原创 第288场周赛
绪论虽然没有AK,但是不知道为什么排名比以前AK了都靠前。可能是因为最后一道题有些难度,缩小了我和大佬之间的差距。最后一个小时写最后一道题,累死累活想了一个贪心遍历的算法,当时是一直RE,后来下来调了调又WA了。题目分析A: 按奇偶性交换后的最大数字做法就是用一个数据结构去保存奇数数字和偶数数字,要求这个数据结构能够返回并弹出最大值。当时没有仔细考虑,直接用了一个multiset去保存,因为红黑树本身就是有序的,所以每次弹出最后一个节点。但是因为把前置–写成后置–了,所以还RE了一发,实在不应该。现
2022-04-11 22:23:00 402
原创 第287场周赛
绪论虽然是上周日参加的比赛,但是这周没有怎么学习,每天就是玩耍。也导致对周赛的总结迟迟没有进行。想着再拖下去下次周赛都要开始了,在这里补一下。这场比赛总体比上场简单一些,但是最后一道题因为忘记初始化类内变量导致调试好久,血泪教训。题目分析A:转化时间需要的最少操作数因为单独考虑小时、分钟太过繁琐,我的方法是将其转换成时间戳(类似chrono的time_since_epoch方法)。class Solution {public: int convertTime(string curre
2022-04-08 10:37:41 928
原创 Leetcode第286场周赛
绪论上周因为有事没有参加周赛,这周没有错过。这次周赛拿到了人生第一个AK,参加大大小小的比赛这么多次,从来没有AK过,泪目了。感觉这次比赛的思维难度对我来讲稍高一些,前三道题就花了一个小时,而以往只需要半个小时。看了一下排名前面的大牛们,还是十分钟就AK了,深觉自己还马达马达大内。题目分析比赛链接:https://leetcode-cn.com/contest/weekly-contest-286/题目难度上第二题和第三题都有一些思维量,不像以前直接模拟。第四题我直接记忆化搜索在最后一分钟过了
2022-03-28 14:20:42 703
原创 Leetcode第284场周赛
绪论最近发现Leetcode每周的周赛难度挺适合我的,而且时间也比较友好(不像Codeforces每次都是半夜)。所以连续参加了三周的周赛。这次才想起来应该记录一下自己的参赛历程。一方面是总结经验,另一方面有了记录就更有动力去提升,去参加下一次比赛。题目分析题目链接:https://leetcode-cn.com/contest/weekly-contest-284/还是往常一样四道题,难度依次提升。A:找出数组中的所有 K 近邻下标简单模拟,对于每一个key,其附近的2k+1个元素都是合法的
2022-03-14 10:32:27 949
转载 Ubuntu修复Fix Busybox Initramfs错误
今天早上我打开电脑,进入Ubuntu系统,结果黑屏了,屏幕显示:BusyBox v1.30.1 (Ubuntu 1:1.30.1-4ubuntu6.1) built-in shell (ash) Enter 'help' for a list of built-in commands.(initramfs)然而我并不知道这个是什么意思,只能打开万能的谷歌搜索了一下,找到一篇解决问题的教程,按照他说的,我输入了exitfsck /dev/sda1 -yreboot然后解决了问题。虽然我
2022-01-21 16:03:54 1786
原创 C++ Variadic Templates(可变参数模板)
本文参考侯捷老师的视频:https://www.youtube.com/watch?v=TJIb9TGfDIw&list=PL-X74YXt4LVYo_bk-jHMV5T3LHRYRbZoH以及C++ primer第五版 相关内容。可变参数模板函数//递归的终止条件void print() {}//Variadic Templates//一般用于递归处理template <typename T, typename... Types>void print(const T&a
2021-12-13 15:09:38 566
原创 使用wireshark+ssh+tcpdump远程抓包
因为需要抓取远程服务器上的数据包,又不想使用tcpdump这种命令行工具进行(用了wireshark后谁还愿意去看密密麻麻的命令行呢),所以在网上查找了一下使用wireshark远程抓包的方法,在这里记录一下。原生支持wireshark本身是支持远程抓包的,不过可能是因为我是Ubuntu下的wireshark的缘故,所以没有远程连接的选项。我刚开始怀疑是我的版本过低,卸载后重新安装,现在的版本是Wireshark 3.4.8 (Git v3.4.8 packaged as 3.4.8-1~ubuntu
2021-11-18 14:36:27 4007
原创 leetcode869. 重新排序得到 2 的幂
题目连接:https://leetcode-cn.com/problems/reordered-power-of-2/题目分析如果直接顺着题目的思路,得到数字n的全排列,然后再去判断其是不是2的幂是比较复杂的。我们应该注意到,因为数字是可以随意排列的,因此所有可以通过变换排列得到的数字都有相同个数的0、1、2,而n⩽1e9n\leqslant1e9n⩽1e9,2的幂只有30个左右,我们可以先记录2的幂次然后再判断当前数字是不是和这些数字有相同的数字组合。AC代码class Int { st
2021-10-28 10:42:01 137
原创 UVA - 442:Matrix Chain Multiplication
题目链接:https://vjudge.net/problem/UVA-442题目分析题目的意思非常简单,就是给定一个矩阵乘法的表达式然后计算就可以了。随便写写AC代码#include <iostream>#include <deque>#include <vector>#include <string>#include <unordered_map>using namespace std;int ans;class M
2021-10-23 21:53:57 172
原创 UVA - 514:Rails
题目链接:https://vjudge.net/problem/UVA-514题目分析题目的意思是给一个栈输入一系列数据,在这个过程中可以出栈,看能否达到某个结果。刚开始我觉得这个情况好多,因此不是用模拟,而应该观察结果本身。对于结果中某个元素x,比他小的元素肯定已经入过栈了,此时可能有两种去处:已经在结果里面了还在栈里面对于1.,只能说它比x 小而且在x的前面,除此之外没有其他约束了。对于2.,那些比x小的元素在结果中的位置肯定在x的后面,而且肯定是逆序排列。因为只能进栈一次,而他们是从
2021-10-21 17:08:58 371
原创 UVA - 210:Concurrency Simulator
题目链接:https://vjudge.net/problem/UVA-210题目分析就是一道模拟题,但是细节有点多。写代码两个小时,调试代码用了两天。。。很长时间不刷题了,这道虽然算法简单但是细节满满的题目对我来说是一个很好的热身。尽量不要去使用匿名名字空间,发现对调试过程不怎么友好(陈硕大大说的对)。使用枚举类型对程序的可读性、可维护性的提升非常大重载输入输出运算符的时候一定要记得返回stream对象这种带有switch语句的,可以使用Stragety模式,这里没有使用,因为每条语句只有
2021-10-20 22:53:51 346
原创 Educational Codeforces Round 114总结
绪论https://codeforces.com/contest/1574/以前想要打CF,总是觉得没有时间,要做这个,要做那个,现在时间充裕了一些,想要多打一些CF,但是光打比赛不总结是没有什么帮助的,这是我从以前的ACM训练中吸取的惨痛教训。从这篇文章开始准备好好总结一些比赛心得。这场比赛是for div2的,因此对我来讲有些难度,我发挥的不是很好,然后理所当然就掉分了(掉了50+,哭哭)A解题思路要求构造正确的括号组合,即每一个左括号有一个相应匹配的右括号,要求给定括号对数n,输出其n种组
2021-09-23 16:40:04 160
原创 UVa-12333:Revenge of Fibonacci 高精度
之前自己仿照紫书上写了高精度库,完善了乘法、减法,并且通过了和C++高精度库GMP的对拍测试,也一些OJ上过了一些高精度的模板题,代码仓库地址:https://github.com/Edward-Elric233/BigInt求解思路题目的意思是求前100000斐波那契数列中某个前缀(不超过40个字符)第一次出现的位置。刚开始我的想法很简单,先求出这十万个斐波那契数列的前缀,然后每次读入的时候查找一遍就可以了,结果超时了。每次查找的复杂度是O(1e5∗40)O(1e5 * 40)O(1e5∗40),有5
2021-08-08 21:14:59 198
原创 Qt for Android环境配置
最近想写一个小APP,但是又不想用Android Studio进行开发,想要用C++进行开发,听说Qt可以进行Android开发,就想尝试一下,结果花了一天时间来配置环境。。。而且发现windows下配置环境更简单一些(我中途还切换到Ubuntu以为会更简单,结果碰壁又回头在Windows下开发),反正qt支持跨平台,在哪个平台进行编码影响不大。首先需要Android Studio下载Android SDK,我下载的是最新版本,我在这里没有遇到什么问题。然后需要下载NDK,在网上看到许多教程都说在An
2021-08-04 21:36:25 725 2
原创 C++ array初始化需要双层大括号
对于array的初始化我们可以使用列表初始化:array<int, 8> test = { 1, 2, 3, 4, 5, 6, 7, 8};但是当我们不再使用简单的内置类型array时:array<pair<int, int>, 8> dirs = { {-1, -1}, {-1, 0}, {-1, 1},
2021-07-24 16:27:21 1875 1
原创 UVA - 1592:Database
题目的意思是找到两行在两列处相等,主要要做的是记录某个值是否重复出现过。经过思考,我的思路是:每一列用一个unordered_map<string,vector<int>>记录单词出现的行数,对于某一行中的两列,如果有两个元素在同一其他行出现了重复,则可以输出结果例如,第4行的第1个元素在1 3 5 6行都出现了重复,第4行的第2个元素在2 3行出现了重复,则r1 = 3; r2 = 4; c1 = 1; c2 =2;每一行用一个数据结构保存每一列在哪些行出现了重复,如果某一行
2021-06-27 17:42:43 207
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人