
C++
文章平均质量分 51
编程经验随笔
Windows
展开
-
【测试】什么是代码覆盖率
常见的编程语言,如Java,C++,Python,JavaScript,PHP和Go等,都有相应的代码覆盖率统计工具。代码覆盖:为了更加全面的覆盖,我们可能还需要理解被测程序的逻辑,需要考虑到每个函数的输入与输出,逻辑分支代码的执行情况,这个时候我们的测试执行情况就以代码覆盖率来衡量,可以理解为白盒覆盖。需求覆盖:指的是测试人员对需求的了解程度,根据需求的可测试性来拆分成各个子需求点,来编写相应的测试用例,最终建立一个需求和用例的映射关系,以用例的测试结果来验证需求的实现,可以理解为黑盒覆盖。转载 2023-03-01 18:01:06 · 265 阅读 · 0 评论 -
一些好用的工具
C++开发工具clionvscodenotepad++截图工具snipaste录屏工具搜索工具everything代理工具fiddler接口测试工具postman。原创 2023-03-01 17:45:27 · 78 阅读 · 0 评论 -
一些好用的github仓库
正交算法库线程池。原创 2023-03-01 17:26:00 · 70 阅读 · 0 评论 -
C++ 单元测试框架 Google Test (gtest)
https://blog.youkuaiyun.com/A_L_A_N/article/details/106952145转载 2023-03-01 10:47:44 · 105 阅读 · 0 评论 -
程序员必看的基本书籍
windows高级编程。原创 2023-02-28 16:17:34 · 93 阅读 · 0 评论 -
设计模式之单例模式
在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。这种方式本身就线程安全,没有多线程的线程安全问题。系统运行中,实例并不存在,只有当需要使用该实例时,才会去创建并使用实例。拷贝构造函数和赋值构造函数是私有类型,目的是禁止外部拷贝和赋值,确保实例的唯一性。单例模式是指在整个系统生命周期内,保证一个类只能产生一个实例,确保该类的唯一性。单例模式可以分为 懒汉式 和 饿汉式 ,两者之间的区别在于创建实例的时间不同。原创 2023-02-28 15:32:53 · 216 阅读 · 0 评论 -
设计模式之工厂模式
简单来说就是用户要订纽约工厂的披萨,他必须去纽约工厂,想订伦敦工厂的披萨,必须去伦敦工厂。工厂方法的适用场合:现在不光有伦敦工厂,还增设了纽约工厂(仍然是同一等级结构,但是支持了产品的拓展),这两个工厂依然只生产三种类型的pizza:chesse,pepper,greak(固定产品)。抽象工厂的适用场合:不光增设了纽约工厂(仍然是同一等级结构,但是支持了产品的拓展),这两个工厂还增加了一种新的类型的pizza:chinese pizza(增加产品族)。抽象工厂 :用来生产不同产品族的全部产品。原创 2023-02-28 14:38:41 · 555 阅读 · 0 评论 -
常用工具简介入门
sonar:three.js23种设计模式。原创 2023-02-28 14:16:40 · 81 阅读 · 0 评论 -
qt操作文件以及字符串转换
/QTextStream方法读取速度至少快百分之30。//从文件加载英文属性与中文属性对照表。Qt|将QString字符串写入文件中。String和QString之间的转化。原创 2023-02-28 10:43:37 · 809 阅读 · 0 评论 -
kiwi编码格式简介
Kiwi是一种基于模式的二进制格式,用于有效地编码数据树。它的灵感来自Google的格式,但更简单,编码更紧凑,并且对可选字段的支持更好。前向兼容性:如果新模式的副本与数据捆绑在一起,则旧版本的模式可以选择读取新数据(新模式可让解码器跳过未知字段)。可选字段的存在是可检测到的:对于协议缓冲区,这是不可能的,尤其是对于重复字段。常用值的有效编码:可变长度编码用于数字值,其中较小的值占用较少的空间。复合对象的有效编码: struct功能支持嵌套对象,且编码开销为零。向后兼容性:新版本的架构仍可以读取旧数据。原创 2023-02-28 08:54:58 · 308 阅读 · 0 评论 -
jsoncpp中json字符串的格式化及非格式化转换
版权声明:本文为优快云博主「Pisces_224」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。之前搞jsoncpp解析时,在将一个json数组整体赋值给一个string变量时,当时调用的是。另,想要string串中的单个字符替换为另一种字符的,传送门在这:点这里。分类专栏: C++ 文章标签: json串格式化/非格式化 c++//方法一:转为格式化字符串,里面加了很多空格及换行符。//方法二:转为未格式化字符串,无多余空格及换行符。//root中写入数据。转载 2023-02-27 17:15:26 · 1327 阅读 · 0 评论 -
cpplint的安装说明
3、pre-commit install【ps: 这一行命令需要在当前项目根目录下运行】git reset --hard (commit hash值) //回退到某个提交。然后在项目目录下会有.git\hooks\pre-commit 文件。git diff --cached -U0 //比较更改。用自己编写好的pre-commit替换这个文件就可以了。因为之前安装过python2.7,现在就不用安装了。进到项目目录,右键git bash here。原创 2023-02-27 17:09:13 · 729 阅读 · 0 评论 -
一文详解CMakeLists文件编写语法规则详解
cmake中project命令正是定义了解决方案的名称,add_executable和add_library命令都会生成一个项目,cmake会自动为每个项目(包括生成可执行文件的项目和生成链接库的项目)创建对应的文件夹,存储编译中间文件。回到project命令下的问题,在外部构建的情况下,PROJECT_SOURCE_DIR指向 的目录同内部构建一样,仍然是项目目录,而PROJECT_BINARY_DIR则有所不同,指向的是/build目录。cmake强烈推荐使用外部构建的方法。转载 2023-02-27 16:37:33 · 824 阅读 · 0 评论 -
windows11 和 chrome设置暗黑模式
地址栏输入:chrome://flags/#enable-force-dark。搜索drak,设置enable。菜单 设置--首选项。原创 2023-02-27 16:32:30 · 726 阅读 · 0 评论 -
C++标准头文件搜索/搜索C++标准函数的头文件
1.在 cppreference网站 站内搜索 这个可能需要代理。比如 std::forward cppreference。2.直接在Google搜索。原创 2023-02-27 16:18:15 · 233 阅读 · 0 评论 -
C++ STL vector添加元素(push_back()和emplace_back())详解
push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);而 emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。显然完成同样的操作,push_back() 的底层实现过程比 emplace_back() 更繁琐,换句话说,emplace_back() 的执行效率比 push_back() 高。因此,在实际使用时,建议大家优先选用 emplace_back()。原创 2023-02-27 16:14:52 · 263 阅读 · 0 评论 -
C++非类型的模板参数
未加确定的代码,直到模板被实例化这些参数细节才真正被确定。而非类型模板参数,面对的未加确定的参数细节是指(value),而非类型。当要使用基于值的模板时,你必须显式地指定这些值,模板方可被实例化。非类型模板参看,顾名思义,模板参数不限定于类型,普通值也可作为模板参数。在基于类型的模板中,模板实例化时所依赖的是某一类型的模板参数,你定义了一些模板参数(原创 2023-02-27 16:07:51 · 113 阅读 · 0 评论 -
QT绘制的基本知识
画笔属性可以在构造函数中指定,也可以使用setStyle(),setWidth(),setBrush(),setCapStyle(),setJoinStyle()等函数设定;HSV/HSL模型比较符合人对颜色的感觉,由色调(0-359),饱和度(0-255),亮度(0-255)组成,主要用于颜色选择器。字体使用QFont类定义,当绘制文字时,Qt使用指定字体的属性,如果没有匹配的字体,Qt将使用最接近的字体;完成0-1范围的填充后,后续颜色铺开的方式可以不同,通过setSpread()函数来设置。转载 2023-02-24 11:16:23 · 573 阅读 · 0 评论 -
C++移动构造和移动赋值函数
移动构造和移动赋值,左值引用和右值引用,完美转发等问题原创 2022-11-21 14:25:32 · 568 阅读 · 0 评论 -
C++读取系统剪贴板数据(windows)
用于方便的获取系统剪贴板的内容,在开发剪贴板相关的功能时,可以作为辅助工具原创 2022-11-21 14:19:03 · 1936 阅读 · 0 评论 -
C++向量夹角公式(带正负)
向量夹角公式,用于求屏幕上两条边的夹角很适合原创 2022-11-21 14:13:30 · 3097 阅读 · 0 评论 -
C++最精准的RGB-HSB(HSV)-HSL的色值转换
经过自己测试验证的最精准的色值转换代码C++注意色域不是一一对应,甚至有些值无意义原创 2022-11-17 21:57:25 · 1043 阅读 · 0 评论 -
emscripten内存与数字类型与小端序
参考:原创 2022-10-08 14:40:37 · 158 阅读 · 0 评论 -
Module object(emscripten)
【代码】Module object(emscripten)原创 2022-09-07 16:12:20 · 339 阅读 · 0 评论 -
调试学习wasm,emscripten的各种用法 js 与 C++ 的交互
/ 编译命令: emcc src/main.cpp bin/main.html --bind。然后在chrome浏览器地址栏输入 localhost:888/main.html即可。或者使用 npm i http-server -g 全局安装http-server。然后在bin目录 执行 npx serve . 前提是安装了 node.js。var returnStr = "玄魂";然后执行 http-server -p 888 --cors。--cors 表示允许跨域。1.下载 emsdk。原创 2022-09-07 16:10:21 · 1043 阅读 · 0 评论 -
Embind方便的实现js与C++的交互
/ 最终的emcc编译命令:emcc src/main.cpp -o bin/function.html -s EXPORTED_FUNCTIONS="['_int_sqrt','_main']" -s EXPORTED_RUNTIME_METHODS=["ccall","cwrap"]// emcc编译命令:emcc src/main.cpp -o bin/function.html -s EXPORTED_FUNCTIONS="['_int_sqrt','_main']"//return a;原创 2022-09-07 15:14:17 · 354 阅读 · 0 评论 -
javascript和C++交互大全(wasm)emscripten
/ 最终的emcc编译命令:emcc src/main.cpp -o bin/function.html -s EXPORTED_FUNCTIONS="['_int_sqrt','_main']" -s EXPORTED_RUNTIME_METHODS=["ccall","cwrap"]// emcc编译命令:emcc src/main.cpp -o bin/function.html -s EXPORTED_FUNCTIONS="['_int_sqrt','_main']"//return a;原创 2022-09-07 14:48:14 · 878 阅读 · 1 评论 -
谈谈绘图闪烁的原因
原因一:如果熟悉显卡原理的话,调用GDI函数向屏幕输出的时候并不是立刻就显示在屏幕上只是写到了显存里,而显卡每隔一段时间把显存的内容输出到屏幕上,这就是刷新周期。一般显卡的刷新周期是 1/80秒左右,具体数字可以自己设置的。这样问题就来了,一般画图都是先画背景色,然后再把内容画上去,如果这两次操作不在同一个刷新周期内完成,那么给人的视觉感受就是,先看到只有背景色的图像,然后看到画上内容的图像,这样就会感觉闪烁了。解决方法:尽量快的输出图像,使输出在一个刷新周期内完成,如果输出内容很多比较慢,那么采用内存缓冲原创 2022-06-22 11:38:52 · 428 阅读 · 0 评论 -
C++11的好用的特性
1.C++11增加了一些关键字,其中有auto (编译时自动根据上下文类型推导),auto关键字作为函数返回类型时,不可以用于声明,只能用于函数定义。因为声明的话没办法根据上下文进行类型推导。nullptr关键字,跟NULL的区别是什么呢?NULL既可以表示空指针也可以表示整数0,而nullptr只能表示空指针。在遇到函数重载,参数分别是int 和 int*时,使用NULL就不知道调用哪个了。新的for循环语法,如下: int numbers[] = { 1,2,3,4,5 }; std::co原创 2022-06-21 16:04:55 · 381 阅读 · 0 评论 -
关于VS下面C++的异常捕获
项目上为了应对程序异常崩溃的情况,加入了DUMP生成机制,也就是调用windows下的API SetUnhandledExceptionFilter()对未处理的异常安装了一个处理函数,在处理函数里面调用MiniDumpWriteDump()生成DUMP文件。这部分代码比较简单,但是在实际测试过程中,发现很多时候程序崩了之后并没有生成DUMP文件。在网上找了一些资料,有用的不多,当然也有很多大神的文档,譬如Matt Pietrek写的关于结构化异常的分析文章(链接:Matt Pietrek 讲解SEH的巨牛转载 2022-06-07 17:21:58 · 673 阅读 · 0 评论 -
C++的assert的用法
assert宏定义是定义在assert.h头文件中:assert主要是用于在函数体开始的地方进行参数的校验,它只有在debug模式下才会生效,不管是我们调试的时候还是单独运行debug编译的exe程序的时候。例如调试的时候:直接运行debug程序的时候: 当然以上都是在debug模式下。release模式下是不起作用的。只一点可以在assert宏的定义的时候看出来:如果 在release模式下开启了调试信息不知道会不会影响,我们来试一下:在这种情况下assert也是无效的,它只和NDEBUG宏有关,rele原创 2022-06-07 17:13:15 · 544 阅读 · 0 评论 -
visual studio 2019 相关配置选项
1.调试时候的命令行参数2.MFC的集成方式3.字符集的选择4.生成事件5.UAC 要求管理员运行配置原创 2022-05-30 16:29:40 · 297 阅读 · 0 评论 -
windows C++编程常用的方法
1.获取当前模块的目录: CString path; GetModuleFileName(NULL, path.GetBufferSetLength(MAX_PATH + 1), MAX_PATH); path.ReleaseBuffer(); int pos = path.ReverseFind('\\');2.解析console 程序参数int main(int argc, char* argv[]){ ModuleManager::Load();...原创 2022-05-30 16:19:52 · 214 阅读 · 0 评论 -
转载:谈一谈Windows中的堆
文章目录Windows Heap概述堆的内存分配策略前端分配器之旁视列表前端分配器之低碎片后端分配器Windbg查看进程中的堆进程堆信息查看查看Segment查看申请的内存地址Windows 自建堆的使用建议保护组件更有效的内存管理进行本地访问减少线程同步的开销迅速释放堆栈总结和参考参考如果在Windows中编程应该了解一些Windows的内存管理,而 堆( Heap)也属于内存管理的一部分。这篇文章对你理解Windows内存分配的基本原理和调试堆内存问题或许会有所帮助转载 2022-05-07 10:22:24 · 375 阅读 · 0 评论 -
转载:Windows程序Dump收集
前面一篇写过《Windbg调试----Windbg入门》,可能不少新手会问,我在本地用Visual Studio去做调试就行了,为什么还需要那么抽象的Windbg去进行调试呢?那是因为: 客户环境复杂多样, 发布的软件,经常会出现在本地测试无法重现的问题。我们不可能在客户的环境装一个几十G的Visual Studio,那么一般会先通过Debug Log进行初步的分析,但是碰到程序崩溃,程序死锁,内存泄漏等,只利用Debug log去做分析是非常困难的。这个时候需要借助程序dump来做进一步的分析,进程的转载 2022-05-07 10:19:23 · 516 阅读 · 0 评论 -
转载:Windows C++堆破坏场景及分析
一个堆破坏的老故事还记得第一次碰到堆破坏的时候,大概十年前了,当时在学校开发一个Wireshark插件,可是有一个问题我久久未能解决: 我修改后的Wireshark运行的时候偶尔启动的时候会出现程序崩溃,那时候也不会用Windbg, 后来用Visual Studio启动Wireshark, 也是偶尔报错,这个时候可以看到堆栈,只记得当时是在一个很正常的内存分配或者释放的时候出现崩溃。那么总结为两点:偶尔重现,那么也就是我们常说的还能跑起来,跑不起来那么就重启进程,重启进程无效,那就万能方法重启机器。这转载 2022-05-07 10:15:34 · 701 阅读 · 0 评论 -
json字符串与map<string,Json::Value>互转 (JsonCpp中的)
string StrUtil::map2jsonstrObject(const map<string, Json::Value>& map_info){ Json::Value jObject; for (map<string, Json::Value>::const_iterator iter = map_info.begin(); iter != map_info.end(); ++iter) { Json::ValueType ...原创 2022-04-28 17:14:34 · 517 阅读 · 0 评论 -
ANSI字符集和Unicode字符集
在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(charset)。 在最初的时候,Internet上只有一种字符集——ANSI的ASCII字符集,它使用7 bits来表示一个字符,总共表示128个字符,其中包括了英文字母、数字、标点符号等常用字符。之后,又进行扩展,使用8 bits表示一个字符,可以表示256个字符,主要在原来的7 bits字符集的基础上加入了一些特殊符号例如制表符。 后来,由于各国语言的加入,ASCII.转载 2022-04-28 16:52:34 · 2180 阅读 · 0 评论 -
C++字符串之间的转换(ansi,utf8,unicode,string ,cstring,wstring)
1.UTF8(string)转 wstring(这里的wstring就是unicode也就是utf16)std::wstring UTF82Wide(const std::string& strUTF8){ int nWide = ::MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), strUTF8.size(), NULL, 0); std::unique_ptr<wchar_t[]> buffer(new wch...原创 2022-04-28 16:48:15 · 4055 阅读 · 0 评论 -
C++字符串的编码
转载链接:https://www.cnblogs.com/akb48/p/5439154.htmlwindows平台 char 表示单字符,占用一个字节 wchar_t表示宽字符,占用两个字节Linux平台 char 占用一个字节 wchar_t 占用四个字节windows平台下对于用字符串保存中文的问题,GBK和UTF8都是用char来表示,只是为了表示一个中文字符需要用到多个char。而对于UNICODE(其实.转载 2022-04-28 16:21:29 · 990 阅读 · 0 评论