自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

whose book 的博客

keep it simple and stupid

  • 博客(45)
  • 资源 (5)
  • 收藏
  • 关注

原创 每日 C++ - std::enable_shared_from_this 特性

前言毫无疑问,C++11 引入的智能指针的特性对于 C++ 开发来说友好很多,但是同样的也引入了一些开发误区。上一篇 《shared_ptr 引入的循环引用的问题》介绍了 shared_ptr 使用的注意点,今天这边作为一点补充。std::enable_shared_from_this 使用场景在高级编程语言如 Java、C# 开发中,我们会发现对象是引用传递的,这个特点在 C++ 中我们可以使用 shared_ptr 来处理。但是在实际开发中,我们往往需要在对象内的方法中传递自身。这样说可能有

2021-03-03 09:30:13 387

转载 开源 C++ 列表

开源 C++ 库列表此页面的目的是构建开源 C++ 库的比较列表,使得人们在需要特定功能的实现时,不必浪费时间在网上( DuckDuckGo 、谷歌、必应等)搜索。若你知道可能对其他人有用的库,请在此添加到它的链接。能包含进来的库没有限制,但是必须能便捷地下载库的源码。以“原态”提供此页面——希望这有用,但不提供任何担保。过时、误导或错误的链接可能出现于此。若你注意到这些错误,则改正它会很有意义。包管理器conanvcpkgbuild2cgethunter通用Boost -

2020-11-09 14:36:29 1663

原创 算法从简单开始 - 两个大数相减

题目任意大小的两个十进制正整数(字符串表示)相减,输出结果解答这里因为是任意大小(当然计算机也是有限制的),所以并不能采用基本类型进行计算,当然我们也不考虑采用大数类(如 Java 的 BigInteger)我们依旧采用竖式计算,但是在处理的时候,应该注意几个处理点较大的数减去较小的数,方便竖式计算;符号通过是否较大数在前判定;当对应位的数值不足,应该从较大数前一位退位,补足,然后再相减(如 11 - 2 = 9,1 - 2 不足,10 退位补足,计算 11 - 2 = 9)#

2020-10-16 17:49:40 674

原创 算法从简单开始 - 两个大数相加

题目两个十进制正整数(字符串表示),均超过 64 位最大无符号整数值,请打印两个正整数的和。解答我们在小学加减法采用的是竖式加减法,这个题也是如此。输入 “112” + “88”,各位相加,满 10 进 1,依次计算个位数、十位数、百位数…我们来看下面的 C++ 代码,竖式加法注意 进位的处理#include <iostream>#include <string>using namespace std;int char2int(char c) { retu

2020-10-16 12:29:11 337

原创 算法从简单开始 - 正小数的进制转换

题目给定一个十进制的正小数转换为二进制的正小数(小数点保留 10 位)解答我们在做十进制正整数转换为二进制正整数时,采用短除法来计算,同样的正小数的进制间转换也是相同方法,参考文章1 参考文章2我们获取正小数的整数部分和小数部分,整数部分的转换同 transform_pos_int 处理,小数部分的转换同 transform_pos_decimal 处理// 十进制转二进制void transform_pos_int(int src) { int mod; int l

2020-10-16 10:39:45 312

原创 每日 C++ - Const 函数

每日 C++ - const 函数这节主要探究类的 const 函数的可调用关系,首先先说明下什么是 const 函数,如下形式:std::string getName() const { return name;}我们来看下面这个类#ifndef __CONSTA_H_INCLUDE__#define __CONSTA_H_INCLUDE__class ConstA {public: ConstA() : x(1), p(&x), xx(1), pp(&

2020-10-12 09:55:33 146

原创 每日 Java - 第一个程序 Hello World!

第一个程序 Hello World!Java 环境操作系统Windows 10JDK 版本1.8.0_202编写 Hello.java我们在 D 盘下创建 java 目录,在 java 目录中创建 HelloWorld 目录,如下所示在 HelloWorld 目录下创建 Hello.java,如下public class Hello { public static void main(String[] args) { System.ou

2020-10-09 20:52:15 125

原创 算法从简单开始 - 找 2 的次幂的正整数

找 2 的次幂的正整数求余法int main(){ int n; while (std::cin >> n) { while (n % 2 == 0) { n = n / 2; } if (n == 1) { std::cout << n << " yes" << std::endl; } else { std::cout << n << " no" << std::endl;

2020-10-08 21:55:33 151

原创 每日 C++ - STL 迭代器 erase 使用陷阱

STL 迭代器 erase 使用陷阱我们通常在操作容器删除某元素操作时,会遇到一些迭代器失效的问题,我们就清空容器操作来作说明vector 容器清空vector 清空的正确示例vector<int> vec{1, 2, 3};vector<int>::iterator iter = vec.begin();while (iter != vec.end()) { vec.erase(iter);}或者vector<int> vec{1, 2, 3};

2020-09-27 12:44:46 552 2

原创 每日C++ - RAII 程序设计

每日C++ - RAII 程序设计RAII 是 C++ 程序开发中常见的一种设计方式,什么是 RAII 呢? RAII 英文全称为 Resource Acquisition Is Initialization,就是资源获取即初始化。怎么来理解 RAII,在 C++ 开发中常见的一种 RAII 设计方式就是 std::lock_guard<std::mutex> 的使用,我们来看一段代码class A{public: void run() { std::lock_gua

2020-09-10 15:03:16 163

原创 每日C++ - STL常见容器初始化

每日C++ - STL常见容器初始化我们在日常使用 STL 模板库时,往往忽略了容器初始化的特征。这里我们来讨论下常见容器的初始化。list 初始化list 支持的初始化形式很多,我们可以查看 list 的源码实现,常见初始化方式如下:list<int> list1; // 默认初始化list<int> list2(10); // 初始化 list,list 包含 10 个为 0 的元素list<int> list3(10, 1); // 初始化 li

2020-09-10 12:53:42 2918

原创 算法从简单开始 - 哈希算法/哈希表

几种基础的数学算法 (三) - 哈希算法/哈希表我们在生活中背诵古诗,通常会整段记忆,对于计算机来说这样通段的搜索实在是太累了。如果存在一串数字,然后通过某种算法可以将一首古诗变成这串数字,那么计算机要搜索这首古诗是否存在,只需要确认这串数字是否存在就行了。我们通常就是由哈希算法来得到这串数字的。但是实际使用中也不能排除两首古诗计算出同一串数字的可能,哈希冲突也就这么来了。现在我们来看看几个概念哈希表Hash Table, 也叫散列表,是根据键(Key)而直接访问在内存存储位置的数据结构。也

2020-09-01 09:41:06 683

原创 算法从简单开始 - 排序算法

几种基础的数学算法(二)- 排序说起排序算法,估计所有小伙伴参加面试都或多或少接触过。我们先来了解几个概念。时间复杂度:算法完成排序的总的操作次数;空间复杂度:算法在运行时所需存储空间大小;稳定的算法:如果 a 原本在 b 前面,而 a = b,算法排序之后 a 仍然在 b 的前面。不稳定的算法:如果 a 原本在b的前面,而 a = b,排序之后 a 可能会出现在 b 的后面。算法对比排序方法时间复杂度(平均)时间复杂度(最差)时间复杂度(最好)空间复杂度稳定性

2020-08-11 21:49:44 132

原创 Java特性 . 泛型

1. 什么是泛型?泛型现在几乎是所有主流强类型编程语言的标配,它允许我们在编写代码时定义一些可变的部分,从而最大化复用代码,提高软件开发效率。我们来看看 C++, C#, Java 的泛型特性。1.1 C++ 泛型C++泛型是通过模板实现的,模板类和模板函数是非常常用的泛型特性。C++11泛型还引入了新特性模板特化,有兴趣同学可以去了解下。template<typename T>T add(T t1, T t2) { return t1 + t2;}templ

2020-08-05 09:13:39 298

原创 微信小程序开发有哪些学习资料

微信小程序开发工具 链接微信小程序开发指南 链接微信小程序设计指南 链接微信小程序支付开发文档 链接微信小程序社区 链接微信小程序公测接入指南 链接微信小程序新手入门 链接微信小程序视频教学 链接微信小程序实战集合微信小游戏小程序图标小程序商城小程序支付...

2021-03-24 07:25:34 183

原创 每日C++ - shared_ptr 的循环引用问题

shared_ptr 的循环引用问题在 C++ 开发过程中,面对浩繁的代码工作,不免会出现各种 bug,而在智能指针使用方面也存在一些难以察觉的坑。shared_ptr 循环引用造成内存泄漏就是一例。当两个内存对象分别拥有对方的非 nullptr 的 shared_ptr 类型的智能指针,导致 shared_ptr 引用计数无法归 0,从而造成系统内存泄漏。我们来看下面的代码class B;class A{public: A() = default; ~A() { std::co

2021-02-27 10:34:36 679

转载 五年 Skype 架构师之路的感言(转)

五年 Skype 架构师之路的感言(转)https://www.infoq.cn/article/learnings-five-years-skype-architect简介作为架构师和设计者,我们常把手头的事情作为工作焦点,很少反思过去如何。我们应该温故而知新。我从作为 skype 架构组领导的 55 个月经历中总结了 6 个经验。其中一些是技术性的,另外一些是架构师较为软性的观点。首先介绍一下 Skype 的背景资料。Skype 背景Skype 是让用户可以进行音频视频通话的软件,也可以拨打普

2021-02-20 11:03:07 193

原创 每日 C++ - 基类构造调用纯虚函数的一个问题

我们来看下面的一段代码class Base {public: Base() { Does(); } virtual ~Base() { } virtual void test() = 0; void Does() { std::cout << "Does"; test(); }};class Derived : public Base {public: Derived() {}; ~Deri

2020-12-14 10:23:47 377

原创 每日 C++ - std::function

std::function 与函数指针std::function 可以代替函数指针bool IsEmpty(const std::string& str){ return str.empty();}typedef bool (*pIsEmpty)(cosnt std::string& str);using is_empty = std::function<bool(const std::string& str)>;int main(){ s

2020-12-03 11:30:46 227

原创 libevent 编程介绍

1. libevent 几个结构体/*--------------------------------------------------------------------------*/event_base // 事件集合event // 事件 event_init() // 初始化默认事件集合event_base_new() // 新建事件集合event_dispatch(); // 使用默认事件集合,开始分发事件event_base_disp

2020-11-30 16:19:26 208

原创 Linux Shell 点滴 - 提取文件名/目录名

提取文件名/目录名$ var=/dir1/dir2/test.cpp.txt$ echo ${var}/dir1/dir2/test.cpp.txt$ echo ${var#*.}cpp.txt$ echo ${var##*.}txt$ echo ${var%.*}/dir1/dir2/test.cpp$ echo ${var%%.*}/dir1/dir2/test$ echo $(basename $var)test.cpp.txt$ echo $(basenam

2020-11-12 19:56:40 109

原创 读书笔记 -《重构-改善既有代码的设计》Part1

读书笔记 -《重构-改善既有代码的设计》Part2

2020-11-04 17:56:50 309

原创 读书笔记 -《重构-改善既有代码的设计》Part4

文章目录读书笔记 -《重构-改善既有代码的设计》Part4简化函数调用Rename MethodAdd ParameterRemove ParameterSeparate Query from ModifierParameterize MethodReplace Parameter with Explicit MethodsPreserve Whole ObjectReplace Parameter with MethodsIntroduce Parameter ObjectRemove Setting M

2020-11-04 17:54:31 191

原创 读书笔记 -《重构-改善既有代码的设计》Part3

文章目录读书笔记 -《重构-改善既有代码的设计》Part3重新组织函数Extract MethodInline MethodInline Temp - 内联临时变量Replace Temp with QueryIntroduce Explaining Variable 引入解释性变量Split Temporary Variable 分解临时变量Remove Assignments to Parameters 移除对参数的赋值Replace Method with Method Object 以函数对象取代函

2020-11-04 17:53:10 243

原创 读书笔记 -《重构-改善既有代码的设计》Part2

文章目录读书笔记 -《重构-改善既有代码的设计》Part1什么是重构重构 - 第一个案例重构原则为何重构何时重构何时不该重构**为什么重构有用 - Kent Beck**如何与产品经理沟通重构的事情间接层和重构重构与设计重构与性能读书笔记 -《重构-改善既有代码的设计》Part1什么是重构重构是这样一个过程:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。为什么编码后还需要改进程序内部结构,不是先设计而后编码吗?在软件版本迭代的过程中,随着特性的增加,开发人员的流动等客观原因,

2020-11-04 17:47:08 245

原创 每日C++ - 谈一下 Visual Studio Code 的 C++ 开发

文章目录说说 Visual Studio Code环境搭建Visual Studio Code 一个 C++ 实例Visual Studio Code & CMake 编译Visual Studio Code 高频快捷键CMakeCMake 基础语法CMake 常用指令CMake 常用变量CMake 构建方式Test 工程编译构建总结说说 Visual Studio Code关于 Visual Studio Code,相信广大看官们已经不感到陌生了,为什么短短几年它能够在 IDE 市场上快速提

2020-11-04 10:35:37 161

原创 每日 C++ - g++ 编译介绍

编译/链接过程-E 选项 编译器仅对输入文件进行预处理g++ -E test.cpp -o test.i-S 编译选项告诉 g++ 在为 c++ 代码产生了汇编语言文件后停止编译g++ -S test.i -o test.s汇编// 缺省时 g++ 建立的目标代码文件有一个 .o 的扩展名g++ -c test.s -o test.o链接// 产生可执行文件 testg++ test.o -o test编译参数-g 编译带调试信息的可执行文件g++ test.o -o

2020-11-03 15:55:05 322

原创 docsify 简单介绍

nodejs 安装nodejs 概览nodejs 中文官网nodejs 下载地址Downloadwindows-64bitlinux x64nodejs Windows 安装我们这里直接下载 bit64 的 msi 安装包进行安装,点击安装包直接安装即可,注意安装包是默认将 nodejs 添加到系统 PATH 的;安装后在 cmd 窗口输入 “node -v” 和 “npm -v” 查看 nodejs 和 npm 的版本;如果显示说明安装 ok;试试安

2020-10-30 11:24:41 1492

原创 ASCII 码表解读

ASCII 控制字符重要的符号0x00 - 0 - NULL0x06 - 6 - 确认 ACK0x16 - 22 - 同步 SYN0x0A - 10 - 换行 LF0x0D - 13 - 回车 CR0x1B - 27 - 取消 Escape0x7F - 127 - 删除 Delete十六进制二进制十进制缩写英文描述中文描述000000 00000NULNULL空字符010000 00011SOHStart Of Heading标

2020-10-21 15:44:17 1236

原创 Java 测试 - 单元测试用例自动生成框架 EvoSuite

EvoSuite 介绍EvoSuite 能够为 java 代码自动生成单元测试用例EvoSuite 生成的单元测试用例符合 JUnit4 标准,可直接在 JUnit 中运行EvoSuite 采用 LGPL 开源协议EvoSuite 官方提供了多种使用方式,包括命令行Maven 插件IntelliJ Idea 插件Eclipse 插件EvoSuite GitHub :https://github.com/EvoSuite/evosuiteEvoSuite 官方网站 :https:/

2020-10-15 20:30:40 1984

原创 每日 Java - Gradle 构建工程

Gradle 构建工程

2020-10-14 12:26:05 187

原创 每日 Java - Java 环境介绍

Java 环境安装和介绍

2020-10-13 20:55:44 121

原创 每日 Java - Maven 构建工程

Maven 构建工程

2020-10-13 09:43:51 420

原创 每日 Java - Ant 构建工程

Ant 构建工程Ant 和 maven,gradle都是 Java 工程的构建工具,如果您以前使用过 make,那么关于构建工具的作用也就了然于胸了。如果您以前没有接触过,那么这篇文章就会帮助你了解 Ant 并让您能够手动去使用 Ant 构建 Java 工程。Ant 安装Ant 是跨平台的,所以您可以在 Windows 和 Linux 等操作系统上安装,我们的例子采用的是 Windows 10 系统, JDK1.8 版本环境。Ant 下载地址, Ant 版本如下图所示下载完成后

2020-10-10 20:43:27 250

原创 算法从简单开始 - 怎么判断回文串

怎么判断回文串什么是回文串?abcba 当字符串是对称结构时,就是回文串。根据回文串的特点,我们可以很快判断字符串是不是回文串,只需要从头尾各取字符逐个比对,一直比对结束为止,都相等则为回文串(回文串长度大于 2)int main(){ std::string str; while (std::cin >> str) { int first; int last; int len = str.length();

2020-10-08 22:11:50 993

原创 每日C++ - STL 迭代器失效性问题总结

关于迭代器失效问题

2020-09-27 10:47:14 337

原创 算法从简单开始 - 用队列实现栈

几种基础的数学算法 - 用队列实现栈栈的特点:先进后出队列特点:先进先出实现栈的 empty(), push(), pop(), top() 的方法,实现语言 C++/JavaC++ 队列实现栈#include <iostream>#include <queue>using namespace std;class MyStack {public: void push(int x) { queue_.push(x); }

2020-09-11 10:01:30 108

原创 树的一些认识

树的一些概念树是一种数据结构;树是由节点(node)和边(edge)组成的无环结构;单个结点是一棵树,树根就是该结点本身;空集合也是树,称为空树,空树中没有结点;设T1,T2,…,Tk是树,它们的根结点分别为n1,n2,…,nk。用一个新结点n作为n1,n2,…,nk的父亲,则得到一棵新树,结点n就是新树的根。我们称n1,n2,…,nk为一组兄弟结点,它们都是结点n的子结点。我们还称T1,T2,…,Tk为结点n的子树。名称解释结点的度一个结点含有的子结点的个数

2020-09-05 17:19:04 343

原创 每日C++ - C++ 的几个面向对象的概念(二)- C++ 中的虚函数

C++ 的几个面向对象的概念(二)C++ 中的虚函数不久前遇到一道测试题,是关于 C++ 中类的虚函数的,话不多说,代码码上。情形一#include <iostream>class A {public: virtual void test() { std::cout << "A test" << std::endl; }};class B : public A {public: void test() override { std

2020-08-31 22:30:38 100

原创 每日C++ - 常量指针与指针常量

每日C++ - 常量指针与指针常量常量指针就是一个指针指向一个常量,所以,一个常量指针可以改变指针地址,却不能改变地址指向的内存。int a = 123;int b = 456;const int* p = &a;*p = b; // 编译时发生错误p = &b; // 通过error: assignment of read-only location '* p'指针常量就是一个地址为常量的指针,一个指针常量不能改变指针地址,却可以该百年地址指向的内存。in

2020-08-21 08:57:22 115

gdb mi.docx

gdb mi 命令说明文档

2021-04-07

【中文】Java API Manual.rar

JavaTM 2 Platform Standard Ed. 5.0 涵盖 java, javax, org 的软件包 API 说明,文档组织格式分为“概述”/“常量字段值”/“序列化表格”/“类分层结构”/“已过时项目列表”/“所有类”/“API帮助”等。

2020-08-24

IrisSkin2第三方控件以及SSK皮肤资源

很好很全的皮肤资源,一直配合IrisSkin2在使用,共享与打架分享,欢迎下载!

2014-01-09

C# 中英文转换

中英文转换很使用,从PC中找到这个上传给大家看看是否好用!

2014-01-08

C#面向对象基础

本文档很简单,介绍了面向对象基础点,说的草草,想进一步了解的同学还是实战下好!

2013-04-15

空空如也

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

TA关注的人

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