自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

FlushHip

现在的自己不开心也不难过,只为寻求心灵上的一丝成就感。

  • 博客(308)
  • 资源 (5)
  • 问答 (1)
  • 收藏
  • 关注

原创 CMake的整型变量之简单的数学运算

CMake中是没有整型变量这一说法的,字符串是CMake的基石,这也能理解,毕竟CMake是用来方便构建项目用的,整那些数学运算意义不大,但是有的时候就有那么一点点需求,比如,统计一下某个目录下生成了多少target。这里我们使用CMake中的mathhttps://cmake.org/cmake/help/latest/command/math.html,它可以实现简单的数学运算,由于需要统计数目,因此这里就需要自增操作:set(cnt 0)# ...math(EXPR cnt "${cnt}

2022-03-24 16:52:42 1597

原创 C++小技巧之反转字符串

下面的代码你一定可以轻松写出:std::string strA = "FlushHip";std::string strB(strA);std::reverse(strB.begin(), strB.end());std::cout << strA << " <-> " << strB << std::endl;有一个小技巧可以少写一行代码:利用反向迭代器和字符串的构造函数。std::string strA = "FlushHip"

2022-03-08 14:49:19 2042

原创 Windows下VS Code设置CMakeTools调试有输入的程序

Windows下,不管是使用VS Code进行本地调试还是远程调试,调试有输入的程序都不会出现输入窗口。先给解决方案。打开setting.json,添加如下代码: "cmake.debugConfig": { "console": "integratedTerminal" }其实这里使用"console": "externalConsole"对于本地调试来说也是没有问题的,但是远程调试是出不来的。点击下方状态栏的小蜘蛛或者直接Ctrl + F5调试。即可解决CMak

2021-03-12 15:21:29 2235 3

原创 CMake在Windows上运行一个带有动态库的可执行程序

由于Windows上不支持Linux上的共享库运行时查找机制(说的就是rpath或者runpath)。那么在Windows上,运行一个带有动态库的可执行程序的最简单方法就是把dll和exe放一起(可执行程序所在目录就是Windows查找动态库必搜索的目录之一)。粗暴一点的方法就是把所有的CMake输出文件都放一个目录去,那么dll和exe也就一定在同一目录;优雅的方法就是,在可执行文件的生成后事件中把动态库拷贝到可执行文件输出目录。粗暴set(CMAKE_RUNTIME_OUTPUT_DIRECTO

2021-03-11 19:26:15 1354

原创 CMake在64位Linux平台上生成32位程序

首先,如果是C语言,需要确定是否安装了gcc-multilib;如果是C++,需要确定是否安装了g++-multilib。假设Linux平台是Ubuntu发行版,使用C++。sudo apt install g++-multilib然后就是对CMake的设置了。这里分为两个部分,对整个CMake项目设置,对单个Target设置。对单个Targettarget_compile_options(${TARGET_NAME} PUBLIC $<$<PLATFORM_ID:Linux>

2021-03-11 19:24:53 3211

原创 CMake适配VS Code调试有标准输入的程序

本文的背景是使用CMake Tools来调试带有标准输入的程序,遇到的问题是CMake Tools目前不能提供一个额外的输入窗口来进行输入,这是目前这个插件的缺陷。目前我解决这个问题的方式是适用freopen来重定向输入到文件。利用条件编译在CMake中添加对应的宏。但是这样会在代码中引入一些不起作用的代码,不美观,不过也是没有办法的事。项目结构如下所示:FlushHip E:\experimentlab\..\..\L6.12 git: master ≣ +0 ~2 -0 ! ❯❯❯ ls

2021-03-11 19:22:54 809

原创 CMake获取当前目录名以及获取上层目录名

CMake中有两个变量,可以获取到当前CMakeLists.txt的当前目录名(绝对路径)和当前文件的绝对路径,分别是CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_LIST_FILE。但是,有时候需要的往往是相对路径名。比如我们编写项目的一些样例,以当前文件夹的名字作为target名,同时还需要把生成的target按照上层目录名来分组,例如下列目录结构:examples |- base |- string |- CMakeLists.txt |- bas

2021-03-11 19:19:45 29589 1

原创 2021计算机考研408计算机学科专业基础综合冲刺复习提纲

背景我是2020年8月份中旬开始复习的,快考试的时候整理出来的这篇文档,本意是帮助自己冲刺复习用的,再加上我是计算机科学与技术专业的,所以很多知识平时都要用到,所以对我来说,需要了解的东西就会少很多,下面这些内容是我觉得需要注意的,原文档我放在GitHub上:408冲刺复习提纲.md,大家如果有补充可以提PR,能帮助到有需要的人就最好了。复习不易,大家加油。数据结构KMP算法,next数组:对应位置前缀和后缀的最长公共部分长度排序排序算法关键字比较次数与原始序列无关:简单选择排序、二分插入排

2021-01-04 13:10:37 1222 1

原创 聊聊C++标准库,准标准库中关于时间的概念和用法

概要在实际C++业务开发中,经常需要使用系统API或者标准库去获取时间,计算时间的需求,其中,时间按概念又分时间段,时间点;按表达形式又分系统时间,本地时间;其实,获取到了时间,如何通过日志的方式把时间恰当表现出来。而我这边使用Windows下开发较多,因此,这里主要介绍Windows和标准库及Boost准标准库关于时间的相关概念和用法。标准库打开标准库关于时间的命名空间chrono https://en.cppreference.com/w/cpp/chrono可以看到三个概念:clock

2020-07-23 13:20:31 1611

原创 Windows下C++得到一个空闲的端口API

这个东西,并不太常用,客户端弄一个Tcp连接,也不需要你去指定端口,系统会自动找一个空闲的端口给你;但是,如果在服务器端,手动得到一个空闲端口是很重要的,毕竟这个端口要固定,因此需要你自己指定一个空闲的端口。那么在Windows下,如何利用C++得到一个空闲的端口呢,答案是Windows的API。要用的Windows系统API如下:#include &lt;tcpmib.h&gt;#in...

2020-05-20 16:45:16 3601 1

原创 Windows下C++动态监测网络变化(对标Windows网络托盘图标)

背景把Windows网络托盘小图标移植到应用程序中来。使得应用界面显示网络状态,状态包括无网络、有线网、无线网(需要显示WiFi信号强度)方案动态监测托盘图标变化(没有采用)动态监测网络状态变化(利用Windows的API和COM接口,也可以采用轮询)问题点获取Windows网络的活动连接列表获取活动连接的网络适配器类型注册网络状态变化的通知,避免轮询获取WiFi信号强度...

2020-05-20 16:44:56 7591 15

原创 Windows中文件和文件夹的链接类型(快捷方式、软链接、硬链接、符号链接)

链接四大类型There are three types of file links supported in the NTFS file system: hard links, junctions, and symbolic links.快捷方式软链接硬链接符号链接快捷方式(Shortcut)A Shell link is a data object that contai...

2020-05-20 16:44:28 6804 1

原创 Windows获取本地安装软件详细信息(对标卸载程序控制面板)

背景在做C++客户端的一些业务时,需要采集本地计算机上已经安装的软件,上传至云端,供后台做数据分析,数据展示等功能,这里需要对标控制面板中的卸载程序列表,做到采集到的软件列表中的信息和控制面板中的保持一致。控制面板中的信息结构名称发布者安装时间版本大小获取信息的方式注册表WMI这里推荐使用注册表,WMI貌似不能完全对标上控制面板中的软件列表。不过可以了解下WMI是怎...

2020-03-02 18:23:00 7766 1

原创 C++中操控器Manipulator控制IO格式浅析

背景对于从C语言过渡到C++的筒子来说,输出流的格式控制是个头痛的事,printf的字符串格式控制不香吗?确实香,很多C++的开源类库都实现了printf的格式控制,函数签名大概类似Format(const std::string &, ...),甚至其他语言都借鉴了printf这种格式控制方式。而C++的输入输出是基于流的方式,类似于std::cout << "Flush...

2020-02-26 12:46:21 985 1

原创 Visual Studio远程调试Windows上C++程序的几种方式

背景远程调试(Remote Debugging)的原理可以见下图:可以看到,远程调试是通过网络进行通信(使用TCP协议)的,将远程程序的运行信息和Visual Studio的控制信息通过网络互传。如果一些特殊的BUG发生在没有网络的情况下,那么远程调试就派不上用场了。其次,远程调试需要在被调试的目标机器上部署一个程序(Remote tools),这个程序msvsmon.exe的版本必须要和...

2020-01-19 10:10:17 3008 1

原创 IsDebuggerPresent和DebugBreak在Windows项目中的应用

首先要从一篇文档说起,https://docs.microsoft.com/zh-cn/windows/win32/debug/basic-debugging,这篇文档介绍了Windows调试的相关内容,比如相关的调试术语Debugging Terminology,可以看一下,举个例子,为什么调试器可以动态修改变量的值,这里Process Functions for Debugging就给出了解释...

2019-12-03 18:45:31 851 1

原创 LoadLibrary下错误返回126错误码排查过程

在开发一些Windows下的应用程序过程中,经常会手动加载一些DLL,使用的就是LoadLibrary这个函数,而这个函数一旦失败,返回的错误码基本都是126,126错误码的意思是找不到指定的模块,这不,我就遇到了这个问题,而且挺诡异的,就是Debug模式下一点问题没有,Release模式下就必出这个错误码。先介绍下问题的环境,一个应用程序需要加载一个IoT模块的DLL,这个DLL又依赖了一些D...

2019-07-21 13:02:26 17296 2

原创 线段树浅析及其指针式C/C++写法

hihocoder 19 - 22线段树节点的数据结构typedef struct Node { int data; Node *lchs, *rchs; Node (int data = 0, Node *lchs = nullptr, Node *rchs = nullptr) : data(data), lchs(lchs), rchs(r...

2019-04-23 16:33:40 849

原创 C++实现URL的UTF8转码

urlurlurl不能出现中文,导致不能传输中文数据,解决方法有下面两个:统一使用base64base64base64转换一下;把中文用UTF-8存储,然后对其进行可视化编码,这也是浏览器的做法。先来看下,一条urlurlurl在浏览器中会被转化成什么样,可以用在线的网址转一下。before :https://blog.csdn.net/FlushHip?type=1&amp;nam...

2019-03-15 17:11:26 2597 1

原创 从一道多线程题来看C++11中条件变量std::condition_variable的使用和原理

现在有一道笔试题是下面这样子的。有两个线程,一个线程循环输出A,另一个线程循环输出B,如何让这两个线程在控制台稳定输出ABABAB…。不用思考太多,我们肯定会定义一个标志变量isTurnA,isTurnA为true输出A,同理输出B,这是一种最简单的有限状态机,只要按照这个状态机进行,那么肯定能答应出答案。isTurnA是共享数据,因此用原子变量或者互斥锁来保护,这里用互斥锁std::mu...

2019-03-07 17:26:01 772

原创 利用googletest命令行参数简化单元测试

首先看看gtest如何写:#include &lt;gtest/gtest.h&gt;int main(int argc, char **argv){ testing::InitGoogleTest(&amp;argc, argv); return RUN_ALL_TESTS();}TEST(main, minor){}可以看到,main中的命令行参数传入了g...

2019-02-26 18:05:35 8733

原创 小米OJ - 灯 - 仔细分析找规律

题目描述链接:Here。一个屋子有 nnn 个开关控制着 nnn 盏灯,但奇怪的是,每个开关对应的不是一盏灯,而是 n−1n-1n−1 盏灯,每次按下这个开关,其对应的 n−1n-1n−1 盏灯就会由亮变灭,或者由灭变亮。保证不会有两个开关控制同样的 n−1n-1n−1 盏灯。现在刘同学想把灯全部开好,但是这些灯一开始的状态非常乱,刘同学想知道最少需要按多少次开关才能使所有灯全部亮起。输入...

2019-02-15 16:22:35 718 1

原创 小米OJ - 找到第 N 个数字 II - 等差数列求和及其通项然后二分

题目描述链接:Here。假如有一组字符串符合如下规律:S1=1S2=12S3=123S4=1234⋯S9=123456789S10=12345678910⋯S18=123456789101112131415161718 \begin{array}{}S_{1} =1\\S_{2} =12\\S_{3} =123\\S_{4} =1234\\\cdots \\S_{9} =123...

2019-01-25 12:19:48 946 2

原创 聊聊C++标准库中优先队列priority_queue的源码

C++标准库提供了优先队列priority_queue,顾名思义,就是可以按照优先级出队的队列,而且时间复杂度为O(logn)O(logn)O(logn),算法中有很多优化项就是用优先队列来优化的。C++11的标准库是怎么构造出优先队列的呢?优先队列是用堆来构造的。所以,优先队列其实并不能叫队列,它的完整定义应该是这样的:优先队列是用堆来构造,包装成队列的适配器。其实想一想,堆确实适合构造优先...

2019-01-02 20:47:33 1853

原创 聊聊C++11标准库中堆(heap)算法的源码

STL中支持堆操作,对外暴露了`std::make_heap`,`std::push_heap`,`std::pop_heap`,`std::sort_heap`,`std::is_heap`,`std::is_heap_until`这6个函数,详细的使用方法可以参见[图解STL中算法的分类、简介及其Demo](https://blog.csdn.net/FlushHip/article/details/82858933#t37)。

2018-12-29 16:25:21 1956 2

原创 2019年全国研究生入学考试计算机学科专业基础综合(408)数据结构编码题

有一个带头节点的单向链表(a1,a2,…,an−1,an)(a_1, a_2,\dots,a_{n-1},a_n)(a1​,a2​,…,an−1​,an​),nnn为偶数,使用空间复杂度为O(1)O(1)O(1)的算法使其变成(a1,an,a3,an−2,…,a4,an−1,a2)(a_1, a_{n},a_3,a_{n-2},\dots,a_4,a_{n-1},a_2)(a1​,an​,a3​,...

2018-12-25 14:15:37 8199 8

原创 Windows/Linux下C++对于UUID的跨平台封装

Universally Unique Identifier,UUID,通用唯一识别码。是用于计算机体系中以识别信息数目的一个128位标识符,这个东西很有用,在分布式系统中经常用于标识一个结点。根据标准方法生成,不依赖中央机构的注册和分配,UUID具有唯一性,这与其他大多数编号方案不同。重复UUID码概率接近零,可以忽略不计。UUID是128位,16个字节,可以用32个HEX进制的数字表示。标准的...

2018-12-19 16:29:28 5414 1

原创 Windows下C++程序实现单例运行

在Windows下,有些程序是需要单例运行的,比如QQ和Wechat吧。QQ可以打开多个Wechat只能打开一个可以自己在Windows下点一点就知道了。那么在Windows下如何实现单例运行呢?这个单例运行和代码的单例设计模式是不是一个东西呢?一一来回答。首先单例模式和这个肯定是不一样的,单例设计模式解决的是在一个进程中只能有一个类实例问题;而程序单例运行是值系统中只能运行该程序的...

2018-12-17 19:36:38 2454

原创 Go利用windres.exe和.rc文件在Windows下生成的程序带有版本、版权、产品名称、图标等属性信息

用Go在Windows下写了一个.exe的程序,这个程序默认是不带版本,版权,产品名称以及图标的,因此,这些东西我们要自己去生成。Go对于程序版本这方面已经有了开源的包,见GitHub - https://github.com/josephspurrier/goversioninfo。你可以自己在Go的代码中引入这个包,并且在生成.syso文件,这样子是可以的。既然提到了.syso,那么可以...

2018-12-13 12:22:18 6515 2

原创 C++中实现HMAC单向散列类

HMAC的维基百科解释是:hash-based message authentication code,其实就是加了盐的单向散列算法。而HMAC的重点就是如何给要散列的数据加盐。加盐公式如下:解释一下上面的符号:⊕\oplus⊕表示异或运算;mmm表示要散列的数据;a∣∣ba || ba∣∣b表示把aaa加入bbb,其实就是用散列算法把aaa算一下,紧接着把bbb算一下;ipadi...

2018-12-05 14:34:28 2073

原创 Windows关机重启API封装

这纯属记录下代码,Windows系统在程序中关机和重启电脑。大体上就是两个步骤:- 拿关机权限- 关机需要注意的点,一定要在`ExitWindowsEx`中加上`EWX_FORCE`参数,不然,在Windows锁屏界面下是关不了机或者重启不了的。

2018-11-30 16:15:40 1440

原创 C++中std::string与C-String字符数组的互相转换

C语言中只有字符数组这一说法,没有C++专门封装的字符串类std::string。而字符数组C-String以\0作为结束符。std::string其实还是存储了C-String这个指针,只不过不同的编译期对std::string中的存储结构都做了不同的处理,这里我们不讨论std::string的实现,只关心一件事,那就是C-String和std::string的相互转换。C-String 2 ...

2018-11-27 14:30:00 8098

原创 招商银行信用卡中心2019秋招IT笔试(AI、开发、测试开发方向)第二批

X游戏题目我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数。要求每位数字都要被旋转。如果一个数的每位数字被旋转以后仍然还是一个数字, 则这个数是有效的。0, 1, 和 8 被旋转后仍然是它们自己;2 和 5 可以互相旋转成对方;6 和 9 同理,除了这些以外其他的数字旋转以后都不再是有效的数字。现在我们有一个正整数 N, ...

2018-11-19 22:32:07 3159

原创 招商银行信用卡中心2019秋招IT笔试(AI、开发、测试开发方向)第三批

员工考勤记录题目给定一个字符串来代表一个员工的考勤纪录,这个纪录仅包含以下两个字符:‘A’ : Absent,缺勤‘P’ : Present,到场如果一个员工的考勤纪录中不超过两个’A’(缺勤),那么这个员工会被奖赏。如果你作为一个员工,想在连续N天的考勤周期中获得奖赏,请问有多少种考勤的组合能够满足要求输入描述:考勤周期的天数N(正整数)输出描述:这N天里能获得奖赏的考勤组合...

2018-11-19 12:09:41 5772 2

原创 招商银行信用卡中心2019秋招IT笔试(AI、开发、测试开发方向)第一批

鸡鸭分类问题题目农场有n只鸡鸭排为一个队伍,鸡用“C”表示,鸭用“D”表示。当鸡鸭挨着时会产生矛盾。需要对所排的队伍进行调整,使鸡鸭各在一边。每次调整只能让相邻的鸡和鸭交换位置,现在需要尽快完成队伍调整,你需要计算出最少需要调整多少次可以让上述情况最少。例如:CCDCC-&amp;amp;amp;amp;amp;amp;amp;gt;CCCDC-&amp;amp;amp;amp;amp;amp;amp;gt;CCCCD这样就能使之前的两处鸡鸭相邻变为一处鸡鸭相邻,需要调整队形两次。输入

2018-11-19 00:10:17 5330 2

原创 聊聊实现C++跨平台ping函数及ICMP请求回显数据包解析

ping我们经常使用,大多数的时候是在命令行ping下IP地址,然后一堆输出。程序中有时候也会用ping函数,那么ping是如何实现的呢。计算机网络告诉我们,ping函数是基于ICMP协议实现的,而ICMP协议又是基于IP协议弄的(ICMP作为IP协议的数据部分传输)。ping通过ICMP协议中的类型8和代码0来搞的,这个类型和代码的组合在ICMP协议中表示请求回显。如果能正常回显,那么返回...

2018-11-12 17:26:59 3316 4

原创 Windows/Linux中C++对于系统函数发生错误时的调试方法(调试Windows/Linux下创建原始socket失败返回-1)

调用系统API时,经常会由于操作不当导致系统函数调用发生错误,而系统API也是比较友好的,会给你一些特殊的返回值,普遍返回-1,同时,会设置一些变量,表示错误类型。在Windows中,调用GetLastError,可以得到最近的调用失败的错误码;在Linux中,“全局变量”errno记录了最近调用失败的错误码。这里纠正一下,errno其实并不是全局变量,errno的作用是thread local...

2018-11-12 16:02:57 1680

原创 快手2019秋季校园招聘算法笔试B卷编程题 - 题解

快手算法笔试题,一个签到题,一个动态规划,一个二分答案。其中二分答案有个数据有问题。题目链接:点这儿。字符串排序题目月神拿到一个新的数据集,其中每个样本都是一个字符串(长度小于100),样本的的后六位是纯数字,月神需要将所有样本的后六位数字提出来,转换成数字,并排序输出。月神要实现这样一个很简单的功能确没有时间,作为好朋友的你,一定能解决月神的烦恼,对吧。输入:每个测试用例的第一行是...

2018-11-07 20:31:12 3291 1

原创 快手2019秋季校园招聘算法笔试A卷编程题 - 题解

快手算法笔试题,两个动态规划,一个签到题。数据太恶心了,魔法深渊那题,没给模,后来是我自己根据结果猜出来的,模是100000000310000000031000000003,居然还不是常规的100000000710000000071000000007;善变的同伴那题,应该是卡常数了,而且代码一会过一会不过。。。题目链接:点这儿。魔法深渊题目前几个月放映的头号玩家简直火得不能再火了,作为一个...

2018-11-07 14:31:01 7122 1

原创 聊聊C++跨类通信机制之消息总线及其实现

如果没有怎么写过项目,更确切地说是没有用面向对象的语言写过项目。就不会明白跨类通信这个需求是多么刚需。为什么要跨类通信?把所有的逻辑都写在一个类中,都是一家人,那就不需要通信了啊。是,确实是这样,当功能不是很多的时候,这样做确实好。但是,随着项目的规模增大,各种功能堆积,各种模块的增加,会使得这个类非常臃肿与庞大。臃肿庞大就意味着不好维护和扩展。因此,我们需要把功能划分出来,把模块划分得细一些...

2018-11-06 18:02:53 3989 3

蘑菇街2016研发工程师在线编程题 - 题解

蘑菇街2016研发工程师在线编程题 - 题解 个人的解答,不喜勿碰.

2017-10-03

2017CSUFT第十届ACM程序设计大赛

题目、题解、数据、代码都有

2017-05-21

gdb官方使用手册

2016-12-01

凸包做题模板

POJ上做的一个凸包的题,可作为凸包的模板。

2016-03-19

CSUFT_ACM日常上课安排

提供我们协会日常上课安排

2016-03-19

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

TA关注的人

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