自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一只羊

一只重新学习C++的羊

  • 博客(147)
  • 资源 (2)
  • 收藏
  • 关注

转载 C++语言的单元测试与代码覆盖率

本文转载自:https://paul.pub/gtest-and-coverage/对代码进行单元测试是几乎每个软件工程师都要完成的工作。本文以C++语言为基础,讲解如何进行单元测试并生成测试报告。前言测试是软件开发过程中一个必须的环节,测试确保软件的质量符合预期。对于工程师自己来说,单元测试也是提升自信心的一种方式。直接交付没有经过测试的代码是不太好的,因为这很可能会浪费整个团队的时间,在一些原本早期就可以发现的问题上。而单元测试,就是发现问题一个很重要的环节。本文以C++语.

2022-05-28 15:48:50 1876

转载 c++ 单元测试框架 gmock 深度剖析

文章转载自,为了便于阅读,对代码和部分内容字体进行了调整:c++ 单元测试框架 gmock 深度剖析 - 走看看概要 随着微服务和CI的流行,在目前的软件工程领域中单元测试可以说是必不可少的一个环节,在TDD中,单元测试更是被提高到了一个新的高度。但是很多公司由于很多不同的原因,没有能持续维护,或者干脆就从来没有写过单元测试,确实,单元测试在初期和代码维护期会需要花一些投入,但是,如果一个项目是需要长期维护和更新的,那么单元测试的作用,相对于投入来说就根本不算什么。见过很多人写的单元测试,...

2022-05-28 14:48:40 1388

原创 使用 clion 从远端服务器拉取文件

本地虽然装了 xshell , 但是传递文件不太方便,xftp又需要收费,发现 clion 也可以从远端服务器拉取文件,哈哈,这可真是一个走入歧途的使用。

2022-05-28 12:51:46 871

原创 单元测试之 - gtest(构建、安装、demo,覆盖率测试)

一、简介我们熟悉的单元测试框架有很多,比如 gtest, boost.test, catch等,今天以功能完备,文档丰富,比较常用的 gtest 为例子,包括构建、安装、demo, 覆盖率展示等。文章主要面向对单元测试了解不多的小白,更多单元测试内容自己百度吧,内容很多。注1、如下内容在个人的腾讯计算云上完成,linux ubuntu系统2、自行百度的意思是搜索,不是真的百度,能用google最好不要用百度,做开发的都懂。二、gtest构建和安装1、源码下载github.

2022-05-28 12:43:30 3454

原创 redis学习资源汇总(一)

详见个人开源仓库:redis: redis学习资料汇总内容概览

2022-05-14 17:05:07 182

转载 【转载】《这是全网最硬核redis总结,谁赞成,谁反对?》六万字大合集

原文地址:《这是全网最硬核redis总结,谁赞成,谁反对?》六万字大合集_兔老大RabbitMQ的博客-CSDN博客

2022-05-14 16:57:31 110

转载 【转载】跳表介绍和实现

原文地址:跳表介绍和实现_兔老大RabbitMQ的博客-CSDN博客

2022-05-14 16:55:14 84

原创 Linux 进程间通信之 - 信号量

前言很久不用,基本概念虽然还记得,估计不会用了,做个小demo练练手。概念信号量(信号灯)本质上是一个计数器,用于协调多个进程(包括但不限于父子进程)对共享数据对象的读/写。它不以传送数据为目的,主要是用来保护共享资源(信号量、消息队列、socket连接等),保证共享资源在一个时刻只有一个进程独享。信号量是一个特殊的变量,只允许进程对它进行等待信号和发送信号操作。最简单的信号量是取值0和1的二元信号量,这是信号量最常见的形式。通用信号量(可以取多个正整数值)和信号量集方面的知识比较复杂,

2022-05-03 17:55:55 1680

原创 设计模式之抽象工厂模式 - 202205

模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。 为了更清晰地理解工厂方法模式,需要先引入两个概念: 产品等级结构:产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体.

2022-04-30 15:47:21 120

原创 设计模式之桥接模式 - 202201

模式动机设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案:第一种设计方案是为每一种形状都提供一套各种颜色的版本。 第二种设计方案是根据实际需要对形状和颜色进行组合对于有两个变化维度(即两个变化的原因)的系统,采用方案二来进行设计系统中类的个数更少,且系统扩展更为方便。设计方案二即是桥接模式的应用。桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编写量。模式定义桥接

2022-04-16 12:41:41 626

原创 设计模式之适配器模式 - 202202

模式动机在软件开发中采用类似于电源适配器的设计和编码技巧被称为适配器模式。 通常情况下,客户端可以通过目标类的接口访问它所提供的服务。有时,现有的类可以满足客户类的功能需要,但是它所提供的接口不一定是客户类所期望的,这可能是因为现有类中方法名与目标类中定义的方法名不一致等原因所导致的。 在这种情况下,现有的接口需要转化为客户类期望的接口,这样保证了对现有类的重用。如果不进行这样的转化,客户类就不能利用现有类所提供的功能,适配器模式可以完成这样的转化。 在适配器模式中可以定义一个包装类,包装不兼容接

2022-04-10 19:51:02 86

原创 设计模式之装饰模式 - 202203

模式动机一般有两种方式可以实现给一个类或对象增加行为:继承机制,使用继承机制是给现有类添加功能的一种有效途径,通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法。但是这种方法是静态的,用户不能控制增加行为的方式和时机。 关联机制,即将一个类的对象嵌入另一个对象中,由另一个对象来决定是否调用嵌入对象的行为以便扩展自己的行为,我们称这个嵌入的对象为装饰器(Decorator)装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任,换言之,客户端并不会觉得对象在装饰前和装饰后有什么

2022-04-10 19:04:33 1055

原创 基于C++11实现的性能耗时统计组件 - 202204

平时经常需要对代码进行性能测试,自己用C++写了一个耗时统计组件,采用C++11标准,不依赖任何特定平台,包含文件即可使用。// PerfTime.h#ifndef _CPP_PERFTIME_H_#define _CPP_PERFTIME_H_namespace PerfTime { // 耗时统计类型 enum class PerfType { PERF_E2E = 0, // 端到端类型,支持多线程 PERF_ACC // 累加

2022-04-04 18:47:52 1487

原创 Clion自动同步代码到远端服务器实践

本地,windows系统,已安装clion;远端,某云服务器,linux系统;目标,配置Clion达到本地代码修改自动同步到远端,在远端进行构建和编译;(补充,由于我购买的某云服务器,初始没有g++, cmake等,先在服务器上安装好)本地新建工程CppLinux,工程在目录 D:\LearnProject\CppLinux 下远端新建对应目录,我通过用户 ubuntu 连接,所以在家目录 \home\ubuntu\LearnProject\CppLinux\ 下开始配置

2021-11-02 23:02:03 2192

原创 C++基础 - union和结构体对齐

一、union我们知道,union大小是其中元素占内存最大的数据成员大小,当一个成员被赋值后,所有其他成员均失效,如下union体typedef union { long i; int k[5]; char c; int *x[5];} DATE;猜猜 sizeof(DATE)是多大呢?其实在不同平台下,结果不一样。32位:结果为2064位:结果为40因为指针在两个平台下大小不一样,而 union 中有指针数组 x二、结构体对齐如下没有

2021-10-22 21:04:06 425

原创 某云服务器ECS使用记录

新人优惠,86块一年,选了linux系统,1C2G远程连接就是linux的命令终端环境,写了和 hello world 程序使用 g++ 编译通过后续用来进行 linux c++开发学习使用,还有远程开发学习使用。

2021-03-21 21:57:27 114

转载 Linux IO模式及 select、poll、epoll详解

转载自:https://segmentfault.com/a/1190000003063859,如有侵权,请联系删除

2021-03-21 17:20:36 82

转载 linux select/epoll

转载自https://www.jianshu.com/p/ed1f9e9a1982,如有侵权,联系删除

2021-03-21 16:38:10 93

原创 C++ - regex基础之区分表达式

今天做一个练习用到了 regex,顺便写了个小程序,代码如下 void regexTest1() { string patten{"<(.*)>(.*)</(\\1)>"}; // 前两个表达式分别为(.*), "\1"表示与第一个表达式内容相同 regex re{patten}; string str1{"<tar>nico</tar>"}; std::smatch sm;

2021-03-20 16:03:21 122

原创 LeetCode - 665. 非递减数列

描述给你一个长度为n的整数数组,请你判断在 最多 改变1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的:对于数组中所有的i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。示例 1:输入: nums = [4,2,3]输出: true解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。示例 2:输入: nums = [4,2,1]输出: false解释: 你不能在只...

2021-02-07 21:30:52 71

原创 LeetCode - 537. 复数乘法

描述给定两个表示复数的字符串。返回表示它们乘积的字符串。注意,根据定义 i2 = -1 。示例 1:输入: "1+1i", "1+1i"输出: "0+2i"解释: (1 + i) * (1 + i) = 1 + i2 + 2 * i = 2i ,你需要将它转换为 0+2i 的形式。示例 2:输入: "1+-1i", "1+-1i"输出: "0+-2i"解释: (1 - i) * (1 - i) = 1 + i2 - 2 * i = -2i ,你需要将它转换为 0+-2i 的形式

2021-02-03 17:15:43 73

原创 LeetCode - 71. 简化路径

描述以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..)表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串。.

2021-02-01 23:15:53 90

原创 LeetCode - 150. 逆波兰表达式求值

描述根据 逆波兰表示法,求表达式的值。有效的运算符包括+,-,*,/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例1:输入: ["2", "1", "+", "3", "*"]输出: 9解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例2:输入: ["4", "13", "5", "/",...

2021-02-01 22:18:54 101

原创 LeetCode - 20. 有效的括号

描述给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = "()"输出:true示例2:输入:s = "()[]{}"输出:true示例3:输入:s = "(]"输出:false示例4:输入:s = "([)]"输出:false示例5:输入:s = "{[]}"输出:true提示:...

2021-02-01 21:30:39 64

原创 LeetCode - 92. 反转链表 II

描述反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤m≤n≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-list-ii/求解 class Solutio...

2021-02-01 18:45:29 93

原创 LeetCode - 206. 反转链表

描述反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-list/求解 class Solution { public: // 方.

2021-02-01 18:21:20 91

原创 LeetCode - 204. 计数质数

描述统计所有小于非负整数n的质数的数量。示例 1:输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2:输入:n = 0输出:0示例 3:输入:n = 1输出:0提示:0 <= n <= 5 * 106来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/count-primes/求解 class Solution...

2021-02-01 15:34:31 75

原创 LeetCode - 220. 存在重复元素 III

掉坑总结:1)int类型值与参数t相加的时候可能出现溢出,编码的时候没有考虑到;2)理解为什么不能用upper_bound来判断,显然如果集合中存在的元素均远远大于当前给定的比较元素num,且num+t也小于给定的元素,则不管upper_bound(num-t) 或者 upper_bound(num+t)均指向第一个元素,无法判断。描述在整数数组 nums 中,是否存在两个下标 i 和 j,使得nums [i] 和nums [j]的差的绝对值小于等于 t ,且满足 i 和 j 的差的绝...

2021-01-30 16:51:04 82

原创 LeetCode - 217. 存在重复元素

描述给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/contains-duplica..

2021-01-30 15:19:49 99

原创 LeetCode - 219. 存在重复元素 II

描述给定一个整数数组和一个整数k,判断数组中是否存在两个不同的索引i和j,使得nums [i] = nums [j],并且 i 和 j的差的 绝对值 至多为 k。示例1:输入: nums = [1,2,3,1], k = 3输出: true示例 2:输入: nums = [1,0,1,1], k = 1输出: true示例 3:输入: nums = [1,2,3,1,2,3], k = 2输出: false来源:力扣(LeetCode)链接:https...

2021-01-30 14:59:47 77

原创 LeetCode - 447. 回旋镖的数量

描述给定平面上n 对 互不相同 的点points ,其中 points[i] = [xi, yi] 。回旋镖 是由点(i, j, k) 表示的元组 ,其中i和j之间的距离和i和k之间的距离相等(需要考虑元组的顺序)。返回平面上所有回旋镖的数量。示例 1:输入:points = [[0,0],[1,0],[2,0]]输出:2解释:两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]示例 2:输入:points = ...

2021-01-30 14:34:41 231

原创 LeetCode - 49. 字母异位词分组

掉坑总结:方法二中对字符串先排序,使用散列表的形式其实我一开始就想到了,但是我怀疑这样对所有字符串排序是否太耗时???(我是那样坚定的认为的),因此我才想出了方法一种那种通过下标的方式,然而现实就是我认为性能好的方法一效率远远低于我认为效率不好的方法二,也算一个警告,性能不是分析那样想当然的。描述给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"]输出:

2021-01-30 14:03:02 66

原创 LeetCode - 454. 四数相加 II

掉坑总结:关联容器中Container.count(key) 返回的是键值key出现的次数,在非mulpti中,要么是0要么是1,mulptiz中可能大于1,跟value值没有关系,其实这个点事直到的,大意了,在哪儿调试了好久。。。。描述给定四个包含整数的数组列表A , B , C , D ,计算有多少个元组 (i, j, k, l),使得A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度N,且 0 ≤ N ≤ ...

2021-01-29 12:03:10 90

原创 LeetCode - 18. 四数之和

掉坑总结:注意,该题中可能出现target为负数,因此不能像正数一样提前终止循环,比如一个测试用例如下(排序后)[-5, -4, -3, -2, 1, 3, 3, 5], target为-11,不能判断nums[0] = -5已经大于 -11就终止循环,当然如果是正数没有问题。代码如下(注释部分) for (int i = 0; i < n - 3; ++i) { if (i > 0 && nums[i] =..

2021-01-29 11:11:40 80

原创 LeetCode - 16. 最接近的三数之和

描述给定一个包括n 个整数的数组nums和 一个目标值target。找出nums中的三个整数,使得它们的和与target最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。提示:3 <= nums.length <= 10^3-10^3<= nums[i]<= 10^3...

2021-01-28 21:51:02 64

原创 LeetCode - 15. 三数之和

描述给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]提示:0 <= nums.length <...

2021-01-28 20:35:55 100

原创 LeetCode - 451. 根据字符出现频率排序

描述给定一个字符串,请将字符串里的字符按照出现的频率降序排列。示例 1:输入:"tree"输出:"eert"解释:'e'出现两次,'r'和't'都只出现一次。因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。示例 2:输入:"cccaaa"输出:"cccaaa"解释:'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。注意"cacaca"是不正确的,因为相同的字母必须放在一起。示例 3:输入:"Aabb"输

2021-01-28 16:15:51 146

原创 LeetCode - 724. 寻找数组的中心索引

描述给定一个整数类型的数组nums,请编写一个能够返回数组 “中心索引” 的方法。我们是这样定义数组 中心索引 的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。示例 1:输入:nums = [1, 7, 3, 6, 5, 6]输出:3解释:索引 3 (nums[3] = 6) 的左侧数之和 (1 + 7 + 3 = 11),与右侧数之和 (5 + 6..

2021-01-28 15:27:09 60

原创 LeetCode - 350. 两个数组的交集 II

描述给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。我们可以不考虑输出结果的顺序。进阶:如果给定的数组已经排好序呢?你将如何优化你的算法?如果nums1的大小比nums2小很多,哪...

2021-01-27 21:48:31 84

原创 LeetCode - 349. 两个数组的交集

描述给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/intersection-of-two-arra..

2021-01-27 21:46:20 101

音视频学习常用工具, mediainfo,yuvplayer

音视频学习常用工具, mediainfo,yuvplayer

2022-03-26

业界常见虚拟数字人介绍

业界常见虚拟数字人介绍

2022-03-15

空空如也

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

TA关注的人

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