自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

G4N3

The Power of Habit 每天进步一点点

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

原创 C语言异常处理就机制setjmp()和longjmp()

这些关键字允许你在代码中定义异常处理块,并在需要时抛出异常,由相应的 catch 块捕获并处理。setjmp()和longjmp()是非局部跳转语句,可在调用栈上,返回到调用路径上的某一个函数中。longjmp() 用于在后面的某个时刻返回到setjmp()点的状态。在C++中,setjmp 和 longjmp 通常不被推荐使用。C语言setjmp()和longjmp()实现异常处理机制。但goto是本地的,只能在函数内部跳转。setjmp() 用于保存当前的程序执行状态。头文件

2024-06-27 13:40:00 234

原创 lftp工具速成

【代码】lftp工具速成。

2024-06-21 17:08:50 123

原创 cloc统计多个文件

【代码】cloc统计多个文件。

2024-06-05 14:55:15 101 1

原创 统计工具cloc的安装与使用

bashrc 中将解压文件夹路径添加到环境变量PATH。解压后有可执行文件cloc。在centos上直接可用。下载的SourceCode(tar.gz)执行. .bashrc生效。

2024-06-05 13:45:18 331

原创 glibc和gcc源码

gcc编译器,https://gcc.gnu.org/

2023-11-27 11:04:48 614

原创 centos perl相关错误

错误:Can’t locate Module/Load/Conditional.pm。

2023-03-20 11:20:51 248

原创 【tokio】broadcast

多生成者、多消费者的广播队列。每个发送的值都被所有消费者收到。

2022-08-16 16:26:35 360

原创 【tokio】watch

一个单一生产者、多消费者的通道,只保留最后发送的值。

2022-08-16 15:56:18 286

原创 【Rust】错误处理

Rust有2中不同的错误处理机制。

2022-08-16 15:05:46 748

原创 【Rust】std::sync::mpsc::channel

mpsc是multiple producer, single consumer的缩写。

2022-08-16 11:45:56 504

原创 【tokio】tokio::sync::Semaphore

当获取许可并且信号量具有剩余的许可时,该函数立即返回许可。但是,如果没有剩余的许可证可用,则将等待,直到有释放的许可证被分配给申请者。信号量维护一组许可。许可用于同步对共享资源的访问。可以允许一个以上的并发调用方同时访问共享资源。仅在feature=“sync”时支持。常用于精准的控制正在运行的任务最大数量。许可个数在初始化时指定。...

2022-08-01 16:41:45 295

原创 【tokio】spawn

spawn派生一个异步任务,并返回一个JoinHandle,用于与异步任务交互。如调用await获取返回值。派生任务使该任务能够与其他任务并发执行。派生的任务可以在当前线程上执行,也可以发送到另一个线程执行。具体内容取决于当前的运行时配置。不能保证派生的任务将执行到完成。当运行时关闭时,无论该任务的生命周期如何,所有未完成的任务都将被丢弃。...

2022-07-26 15:35:42 1914

原创 【tokio】异步编程

异步编程如果操作不能立即获得执行结果,操作会挂起到后台,执行线程不阻塞,继续执行其他操作任务。await对返回值执行await时,才执行异步操作。这里的返回值是指调用异步函数的返回值,该返回值标识这个异步操作。这是一个注释宏,会将异步main函数转换为同步main函数,初始化运行时,并执行异步main函数。同步编程按程序编写的顺序执行,如果操作不能立即获得执行结果,会一直阻塞直到获取到结果。async标识函数为异步,async标识的函数会编译成异步执行例程。...

2022-07-26 11:28:11 603

原创 【Rust】map

Rust中的map是指map方法,并不是C++中map数据结构,c++中的map在Rust中等价为的集合类型HashMap。不少的对象都有实现map方法,基本含义相同map方法接受一个闭包,并创建一个新的迭代器,在新迭代器的每个元素上调用该闭包。map和for可以实现相同的功能,但是map返回的迭代器,在执行上惰性的。必须调用next()才能执行。Rust有借鉴Haskell,Haskell就是惰性求值的函数式编程语言。...

2022-07-22 16:22:46 3351

原创 【Rust】格式化输出

基础类型都实现了Display特征,对于vector,tuple,结构体,枚举需要自己实现Display特征。#[derive(Debug)]通过增加该属性宏,自动为结构体,枚举实现了Debug特征。大多数Rust类型都实现了Debug特征,结构体,枚举需要实现Debug特征。{}为占位符,等同于c中%d,%f的%。更多格式化格式,参考标准库文档。......

2022-07-22 11:31:39 547

原创 GCC版本对C++的支持情况

参考C++版本GCC版本支持情况GCC版本指定版本的命令标志C++98完全支持是GCC 6.1之前版本的默认模式-std=c++98 or -std=gnu++98C++11完全支持从GCC4.8.1版本开始完全支持-std=c++11 or -std=gnu++11C++14完全支持从GCC 6.1版本开始完全支持,是GCC 6.1到GCC 10 (包括) 的默认模式-std=c++14 or -std=gnu++14C++17完全支持从G

2021-06-10 09:55:59 22702 1

原创 【C++】什么是RAII?

什么是RAIIRAII(Resource Acquisition Is Initialization)是由c++之父Bjarne Stroustrup提出的,中文翻译为:资源获取即初始化。 是C++的一种资源管理,避免资源未释放的机制。如何理解RAII资源获取即初始化不太好理解。如果翻译成初始化就获取了资源, 可能更容易理解它的作用。但感觉是只说一半。完整的含义是:初始化后就可以使用了,不需要考虑释资源释放的问题。也有说名字改成作用域界定的资源管理(Scope-Bound Resource Mana

2021-05-07 20:06:40 504

原创 LeetCode 1832. 判断句子是否为全字母句

LeetCode全字母句 指包含英语字母表中每个字母至少一次的句子。给你一个仅由小写英文字母组成的字符串 sentence ,请你判断 sentence 是否为 全字母句 。如果是,返回 true ;否则,返回 false 。示例 1:输入:sentence = “thequickbrownfoxjumpsoverthelazydog”输出:true解释:sentence 包含英语字母表中每个字母至少一次。示例 2:输入:sentence = “leetcode”输出:false提示:

2021-04-30 12:00:43 178

原创 LCP 06. 拿硬币

LeetCode桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。示例 1:输入:[4,2,1]输出:4解释:第一堆力扣币最少需要拿 2 次,第二堆最少需要拿 1 次,第三堆最少需要拿 1 次,总共 4 次即可拿完。示例 2:输入:[2,3,10]输出:8限制:1 <= n <= 41 <= coins[i] <= 10==============方法一class So

2021-04-28 20:21:24 103

原创 Enable multithreading to use std::thread: Operation not permitted

简单示例#include <iostream>#include <thread>void hello() { std::cout << "hello world" << std::endl;}int main() { std::thread t(hello); t.join();}编译命令:g++ -std=c++11 hello.cpp -o hello -pthreadC++支持多线程,有三点注意:包含

2021-04-28 19:54:19 2364

原创 C++11 计算时间间隔

steady_clock 专门设计用来计算时间间隔的。#include <iostream>#include <chrono>int main() { int TIMES = 1000000000; int value = 0; auto start = std::chrono::steady_clock::now(); for (int i = 0; i < TIMES; ++i) { value = 1 - value

2021-04-21 17:22:36 2161 1

原创 TCP概要总结

1. 定义传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS: Maximum Segment Size)通常受该计算机连接的网络的数据链路层的最大传送单元(MTU: Maximum Transmission Unit)限制。之后TCP把数据包传给IP层,由它来

2021-03-11 15:01:14 153

原创 如何写对二分查找,要关注哪些细节?

很多人都玩过猜数字游戏。在1-100中选择1个数字,让你猜出是什么数字。猜错了会告诉你大了还是小了。 猜数字的这个过程就和二分查找的思想很相似,只不过二分查找每次都猜中间的数字。二分查找过程:获取中间位置根据中间位置的值和目标值比较,相等就找到了。不管的大了还是小了,都会排除掉一半。更改区间的边界,缩小查找范围。使用剩下的一半重复这个过程,直到找到目标值。二分查找的思想和实现都是比较简单的,大多数人理解和写出二分查找都是很容易的。但是要写对还是有一些细节需要注意的。class Soluti

2020-10-24 11:35:25 112

原创 LeetCode 234. 回文链表

LeetCode请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?=====/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int

2020-10-23 19:14:07 136

原创 LeetCode 763. 划分字母区间

LeetCode字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。示例 1:输入:S = “ababcbacadefegdehijhklij”输出:[9,7,8]解释:划分结果为 “ababcbaca”, “defegde”, “hijhklij”。每个字母最多出现在一个片段中。像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。提示:S的长度

2020-10-22 18:19:18 140 1

原创 LeetCode 925. 长按键入

LeetCode你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。示例 1:输入:name = “alex”, typed = “aaleex”输出:true解释:‘alex’ 中的 ‘a’ 和 ‘e’ 被长按。示例 2:输入:name = “saeed”, typed = “ssaaedd”输出:fa

2020-10-21 09:40:21 146

原创 LeetCode 143. 重排链表

LeetCode给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.====/** * Definition

2020-10-20 09:56:56 203

原创 LeetCode 844. 比较含退格的字符串

LeetCode给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。示例 1:输入:S = “ab#c”, T = “ad#c”输出:true解释:S 和 T 都会变成 “ac”。示例 2:输入:S = “ab##”, T = “c#d#”输出:true解释:S 和 T 都会变成 “”。示例 3:输入:S = “a##c”, T = “#a#c”输出:true解释:S

2020-10-19 14:09:01 70

原创 LeetCode 977. 有序数组的平方

LeetCode 977. 有序数组的平方给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例 1:输入:[-4,-1,0,3,10]输出:[0,1,9,16,100]示例 2:输入:[-7,-3,2,3,11]输出:[4,9,9,49,121]提示:1 <= A.length <= 10000-10000 <= A[i] <= 10000A 已按非递减顺序排序。====思路计算完排序就好了原本是单调递增

2020-10-16 10:34:56 74

原创 LeetCode 1002. 查找常用字符

LeetCode给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。你可以按任意顺序返回答案。示例 1:输入:[“bella”,“label”,“roller”]输出:[“e”,“l”,“l”]示例 2:输入:[“cool”,“lock”,“cook”]输出:[“c”,“o”]提示:1 <= A.length <= 100

2020-10-14 20:10:14 57

原创 LeetCode 24. 两两交换链表中的节点

LeetCode给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.=====/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : va

2020-10-13 16:40:34 79

原创 LeetCode 142. 环形链表 II

LeetCode给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。====思路:判断环,已知方法公式可推断:从相遇点和启点出发的2个指针,一定会在入口点的相遇。/** * Definition for singly-linked list. * struct ListNode { *

2020-10-10 10:55:41 180

原创 LeetCode 141. 环形链表

LeetCode给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。/** * Definition for singly-linked list. * stru

2020-10-09 19:56:06 184

原创 LeetCode 1431. 拥有最多糖果的孩子

给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。示例 1:输入:candies = [2,3,5,1,3], extraCandies = 3输出:[true,true,true,false,true]解释:孩子 1 有 2 个糖果,如果他得到所有

2020-09-30 14:11:53 140

原创 LeetCode 算法面试汇总 搜索二维矩阵 II

LeetCode编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定 tar

2020-09-30 10:02:20 145

原创 LeetCode 算法面试汇总 多数元素

LeetCode给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2====思路:计数法,可使用HashMap,统计过程中,超过半数即为多数元素。排序法,排序后,中间元素必为多数元素。摩尔投票法,使用不同的两个元素相抵消,最差的情况,每个不同于多数元素的值,都和多数元素抵消

2020-09-30 09:38:14 187

原创 LeetCode 算法面试汇总 只出现一次的数字

LeetCode链接只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4====思路:两个数异或结果为0. 推理出一个数异或同一个数2次,值不变。同理vector中所有数异或结果为出现1次的那个数。使用std::accumulate()完成vector的

2020-09-29 17:52:22 111

原创 assert

assert一般在debug版本,用来检查永远不可能发生的条件。release版本禁用assert。头文件#include<assert.h>使用assert(i > 100);不改变代码情况下,禁用assert#include<assert.h> 前面定义#define NDEBUG。编译是添加 -DNDEBUG编译参数。注意只检查添加,不写功能逻辑在assert中。 如i++, 禁用后,不会有++操作。#define NDEBUG要定义在#inc

2020-06-09 19:56:41 106

原创 《Effective C++》 条款34 区分接口继承和实现继承

条款34 区分接口继承和实现继承public继承可以细分为函数接口继承和函数实现继承。实际使用的三种情况派生类只继承基类的接口;派生类继承基类的接口和实现, 而且可以重写继承的实现;派生类继承基类的接口和实现, 并且不允许重写任何东西;例子class Shape{public: virtual void draw() const = 0; virtual void error(const string& msg); int objectID() const; .

2020-05-09 20:59:35 141

原创 override和final标识符

override和final标识符override和final是C++引入的新的标识符。注意是标识符不是关键字。标识符和关键字的区别关键字(KEYWORD):也称保留字。它们为语言所用,不可用于重定义或重载。标识符(IDENTIFIERS):一个标识符是一个由数字,下划线,小写和大写拉丁字母,和大多数 Unicode 字符组成的任意长度的序列。在声明中,可以用标识符来命名对象、引用、函数、枚举项、类型、类成员、命名空间、模板、模板特化、形参包、goto 标号,以及其他实体。

2020-05-09 10:57:54 1316

设计模式之禅 第二版

设计模式之禅 第二版 前 言 第一部分 大旗不挥,谁敢 冲锋—热身篇 第1章 单一职责原则 1.1 我是“牛”类,我可以担任多职吗 1.2 绝杀技,打破你的传统思维 1.3 我单纯,所以我快乐 1.4 最佳实践 第2章 里氏替换原则 2.1 爱恨纠葛的父子关系 2.2 纠纷不断,规则压制 2.3 最佳实践 第3章 依赖倒置原则 3.1 依赖倒置原则的定义 3.2 言而无信,你太需要契约 .....

2018-05-11

ANSI - Programming Languages - C++ (ISO-IEC-14882 - 2003).pdf

ANSI - Programming Languages - C++ (ISO-IEC-14882 - 2003)

2007-08-06

空空如也

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

TA关注的人

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