自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

勿在浮沙築高台

不为繁华易匠心

  • 博客(140)
  • 收藏
  • 关注

原创 详细的线程池讲解,手写C与C++版本

详细的线程池讲解,手写C与C++版本在此感谢苏丙榅的教程讲的很详细,我看了他的C版本教程,对线程池有了深刻理解,手写了C版本,并自主改了C++版本。线程池是消费者生产者模型的其中之一。这里面的线程城同步很重要,稍不注意就会造成死锁。主要用的是互斥锁mutex。学习线程池需要有线程的基础知识,比如线程创建,互斥锁,销毁线程,条件变量等等。接下来详细介绍线程池。首先来看下图,下图所示了单进程单线程系统处理任务的方式,很多任务任务进来时,需要排队处理:下面让我们看进程池的处理方式,看下图:在这里简单

2021-06-08 21:55:43 2092 12

原创 基于阿里云用C/C++做了一个http协议与TCP协议的web聊天室的服务器——《干饭聊天室》

基于阿里云用C/C++做了一个http协议的web聊天室的服务器——《干饭聊天室》在这里首先感谢前端小伙伴飞鸟本文一切输出内容都是调试用的一、用cpp封装socket套接字包含成员有位于in.h下的sockaddr_in结构体:struct sockaddr_in { __kernel_sa_family_t sin_family; /* Address family 地址结构类型 __be16 sin_port; /* Port number 端口号 st

2021-06-01 21:12:51 1643 10

原创 C指针,太细了

C指针,太细了

2022-09-05 21:54:14 245 1

原创 github静态网页加载pdf

github静态网页加载pdf

2022-08-04 22:43:17 1604 1

原创 阿里云服务器ssh远程连接没反应的问题(关于校园网)

ssh连接报错

2022-07-04 15:42:06 951

原创 分享一个算法解释挺清楚的文章博客链接

分享一个算法解释挺清楚的文章博客链接文章作者链接数据结构与算法系列 目录具体内容如下图所示,觉的作者写的挺好,希望更多人看到:

2022-04-26 14:37:45 637

原创 VS2019遇到的坑——C4716

具体代码如下:bool operator!=(const _list_node_iterator & node2){//必须const? return this->node != node2.node;}在linux平台编译完全没问题,在vs2019上报C4716错误,缺少返回值错误错误出在注释结尾的?上,此?号为中文符号,改为英文符号?即可...

2021-12-29 21:48:18 993

原创 C++显示转换、dynamic_cast重点

命名的强制类型转换具体格式如下:cast-name<type>(expression)type是转换的目标类型expression是要转换的对象cast-name包括static_cast、dynamic_cast、const_cast和reinterpret_caststatic_cast只要不包含底层const都可以使用static_cast。例如下面转换:double slope = static_cast<double>(j)/i;当需要把一

2021-12-27 22:57:59 436

原创 APUE(第九章)进程关系

终端登录网络登录进程组同一进程组中的各进程接收来自同一终端的各种信号。每个进程组有一个唯一的进程组ID,进程组ID类似于进程ID,是一个正整数,存放在pid_t中#include <unistd.h>pid_t getpgrp(void);//返回值:调用进程的进程组IDpid_t getgid(pid_t pid);//成功:返回pid的gid,出错返回-1若pid是0,返回调用进程的进程ID,等价于getgrp();每个进程组有一个组长进程。组长进程组ID等于其进程

2021-12-22 16:42:25 304

原创 APUE(第八章)进程控制

进程标识每个进程都有一个非负整型表示的唯一ID。由于进程ID总是唯一的,可将其用作其他标识符保证唯一性,比如用进程ID作为名字的一部分创建一个唯一的文件名进程ID是唯一的但是可以复用。当一个进程终止后,其进程ID就成为复用的候选者,大多数系统都有延时算法,使得赋予新建进程得ID不同于最近终止进程所使用得ID。防止将新进程误认为使用同一ID的某个已终止进程系统中有一些专用进程ID为0的进程称为调度进程,或者叫交换进程,该进程是内核的一部分,并不执行磁盘上的程序,也被称为系统进程

2021-12-21 16:14:59 553

原创 APUE(第七章)进程环境

APUE(第七章)进程环境mainint main(int argc,char **argv);//或者int main(int argc,char *argv[]);具体参数描述看:关于int main( int argc, char* argv[] ) 中arg和argv参数理解进程终止正常终止从main函数返回调用exit调用_exit或_exit最后一个线程从其启动例程返回从最后一个线程调用pthread_exit异常终止调用abort接收到一个信号

2021-12-20 15:42:49 205

原创 APUE(第五章)标准IO

本章介绍的标准IO库,不仅是UNIX,多其他操作系统都实现了标准io库,比如windows,由ISO C标准说明缓冲的重要性流和FILE对象标准IO库的操作是围绕流(stream)进行的。标准IO文件流可用于单字节和多字节(宽)字符集,当一个流最初被创建时,并没有定向若在未定向的流上使用多字节的IO函数,则该流的定向设置为宽定向的若在未定向的流上使用单字节的IO函数,则该流的定向设置为字节定向的。只有两个函数可以改变流的定向,freopen清除一个流定向,fwide设置流的.

2021-12-17 20:51:50 579

原创 APUE(第四章)文件和目录

重点理解文件系统函数stat、fstat、fstatat和lstat#include <sys/stat.h>int stat(const char *restrict pathname,struct stat *restrict buf);int fstat(int fd,struct stat *buf);int lstat(const char *restrict pathname,struct stat *restrict buf);int fstatat(int fd,co

2021-12-13 16:24:51 396

原创 APUE(第二章)

UNIX标准化ISO Crestrict关键字不影响POSIX接口。restrict关键字告诉编译器,哪些指针是可以优化的,其方法是指出指针引用的对象在函数中只能通过该指针进行访问。IEEE POSIXPOSIX最初是IEEE制定的的标准族是可移植操作系统接口,第一章有介绍下图是POSIX要求必须含有的头文件,·表示含有下图是POSIX要求可选含有的头文件,·表示含有,XSI表示(X/open System Interface,XSI,详细见下一标准)Single U

2021-12-10 20:31:56 672

原创 APUE(第三章)文件IO

引言本章主要讲文件IO包括:open、read、write、lseek以及close。这些函数通常被称为不带缓冲的IO,不带缓冲至每个read与write都有内核中的一个系统调用。这些不是ISO C的组成部分,但是是Posix.1与SUS的组成部分本章介绍的原子操作概念十分重要还将介绍dup、fcntl、sync、fsync、ioctl等等文件描述符所有文件都通过文件描述符引用文件描述符是一个非负整数打开或者创建一个新文件,内核进程返回一个文件描述读写一个文件时,将其作为参数传递给

2021-12-10 17:56:32 1018

原创 APUE(第一章)

UNIX操作系统体系结构内核:控制计算机硬件资源,提供程序运行环境系统调用:内核的接口公共函数库与shell:构建在系统调用之上,shell是一个特殊的应用程序,为其他应用程序提供了一个接口广义讲法用户登录口令文件在/etc/passwd文件中,具体格式如下分别对应用户名:口令:数字用户ID:用户组ID:注释字段:开始目录:对应的shell程序shellshell是一个命令解释器,读取用户输入的命令,然后执行命令是交互shell,如果从文件输入则为shell脚本,一

2021-12-06 20:16:08 1308

原创 C++_泛型编程与标准库(十)——set与map

C++_泛型编程与标准库(十)——set与map参考:《侯捷泛化编程与标准库》、GNU9.3.0,vs2019图中标红部分为自己的笔记理解SETGNU 9.3.0的set部分代码如下,图中可以看到_Rb_tree重定义为_Rep_type,由_Rep_type再定义一个红黑树,其中key和value一样vc2019的set部分代码如下,进一步观察_Tree可以看到,vc2019少了一个模板参数,而实现方法就在_Tree的模板参数也是一个泛型模板,在_Tset_traits中实现key就

2021-11-29 17:14:04 389

原创 C++_泛型编程与标准库(九)——红黑树的使用

C++_泛型编程与标准库(九)——红黑树的使用参考:《侯捷泛化编程与标准库》、GNU9.3.0,vs2019图中标红部分为自己的笔记理解 struct _Rb_tree_node_base { typedef _Rb_tree_node_base* _Base_ptr; typedef const _Rb_tree_node_base* _Const_Base_ptr; _Rb_tree_color _M_color; _Base_ptr _M_p

2021-11-28 22:59:15 744

原创 C++_泛型编程与标准库(八)

C++_泛型编程与标准库(八)参考:《侯捷泛化编程与标准库》、GNU9.3.0,vs20191、arrayGNU 2.9的写法array GNU9.3.0部分源码array没有ctor,没有dtor,包括vs2019也是template<typename _Tp, std::size_t _Nm> struct __array_traits { typedef _Tp _Type[_Nm];//_Type为数组名类型,通过其定义出来就是一个数

2021-11-24 20:49:14 698

原创 shell笔记

shell笔记1、shell基础命令与逻辑语言共存,类似于C语言&& ||具有逻辑判断, &&是前一个命令失败,后面不会执行,||是前一个命令失败,后面命令若能执行则执行。;不影响命令执行`mkdir /home/1/2/3 &&echo "OK"`#两条命令都不会执行`mkdir -p /home/1/2/3 &&echo "OK"`#会显示ok,因为-p表示如果没有目录会自动创建,-p表示递归创建输出命令ec

2021-11-22 20:34:26 1150

原创 C++11

C++11参考侯捷C++11&14,《C++ primer》1、Spaces in Template ExpressionsC++2.0之前的模板在使用时,如果模板参数最后一个符号是> 需要用空格将其与最后的>隔开,否则编译器会把模板参数的最后一个>当成操作符vector<list<int> >//旧vector<list<int>>//新 2、nullptr、nullptr_t与NULLstd::nu

2021-11-22 10:44:28 657 1

原创 C++_STL标准库——容器

C++_STL标准库——容器参考:cplusplus.com - The C++ Resources Network,VC2019,《C++primer》,《侯捷泛化编程与标准库》1、C++_STL——array(C++11)2、C++_STL——list(and forward_list)3、C++_STL——deque and vector4、C++_STL——queue(and priority_queue)5、C++_STL——stack6、C++_STL——map、multima

2021-10-28 18:26:58 265

原创 C++_STL——unordered_map、unordered_multimap、unordered_set、unordered_multiset

C++_STL——unordered_map、unordered_multimap、unordered_set、unordered_multiset参考:cplusplus这几种都是拉链法所写的,所以放在一起他们有很多相似之处,以下只记录之前没遇到过的成员函数遇到不清楚的可以看C++_STL——map、multimap1、std::unordered_map::bucketsize_type bucket ( const key_type& k ) const;1.1功能

2021-10-28 17:05:37 605

原创 C++_STL——map、multimap、set、multiset

C++_STL——map、multimap这里专栏里其他文章提到的函数(方法)就不会再说参考:cplusplus有序哈希表有序不可重复哈希表(映射)maptemplate < class Key, // map::key_type class T, // map::mapped_type class

2021-10-28 15:28:06 335

原创 C++_泛型编程与标准库(七)

C++_泛型编程与标准库(七)参考:《侯捷泛化编程与标准库》、VC20191、深度探索vector笔者觉得在最新的VC2019下不是二倍增长,虽然是几何增长,但是增加的是之前的1/2;不是完全二倍增长在VC2019的32位程序下,vector类型大小是16位的,其中包含了3个4位的功能同start,finish,end_of_storage的指针,还有4位是继承基类容器(_Container_base12)里的指针而来的四个字节;struct _Container_base12 {_Co

2021-10-28 12:56:59 421

原创 C++_泛型编程与标准库(六)

C++_泛型编程与标准库(六)1、iterator几个特定属性vc2019的链表list迭代器部分代码// CLASS TEMPLATE _List_iteratortemplate <class _Mylist>class _List_iterator : public _List_const_iterator<_Mylist> {public: using _Mybase = _List_const_iterator<_Myli

2021-10-20 22:02:06 296

原创 C++_泛型编程与标准库(五)

C++_泛型编程与标准库(五)1、容器与容器之间的关系2、深度探索listlist是双向链表,从vc2019的list源码和以下图片都可以看出template <class _Value_type, class _Voidptr>struct _List_node { // list node using value_type = _Value_type; using _Nodeptr = _Rebind_pointer_t<_Voidptr, _Lis

2021-10-19 20:44:12 207

原创 C++_泛型编程与标准库(四)

C++_泛型编程与标准库(四)1、注意一个特化的typedefine2、分配器2.2、VC2019的allocator类1. allocate调用operator new,再调用malloc2. deallocate调用operator delete,operator delete又调用freetemplate <class _Ty>class allocator {public: static_assert(!is_const_v<_Ty>, "The

2021-10-19 15:33:07 568

原创 C++_泛型编程与标准库(三)

C++_泛型编程与标准库(三)1、分配器简单测试,后面还会单讲实测VC2019在Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include文件夹下2、标准库实现方法,OOP与GP的区别3、链表list不能使用算法库的sort链表list不能使用算法库的sort,否则会出错,比如下列代码:#include <iostream>#include <list>#inclu

2021-10-16 17:29:38 132

原创 【每日一题】212. 单词搜索 II

212. 单词搜索 II题目描述:给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。示例1:输入:board = [["o","a","a","n"],["e","t","a","e"],["i","h","k","r"],["i","f","l","v"]],

2021-09-18 20:35:42 130

原创 CPP字典树写法

CPP字典树写法前言在网上查询了许久,并未找到C++的字典树的标准库,做题时经常用到,所以在此专门学习与写一个字典树,供以后使用描述1、采用哈希表当做树的节点2、用int 整型判断到达该节点是否为完整单词3、采用栈的方式删除单词Trie.h#ifndef CPPTRIE_TRIE_H#define CPPTRIE_TRIE_H#include <unordered_map>#include <stack>class Trie {private:

2021-09-18 16:35:56 403

原创 C++_STL——stack

C++_STL——stacktemplate <class T, class Container = deque<T> > class stack;堆栈后进先出堆栈堆栈是一种容器适配器,专门设计用于在 LIFO 上下文(后进先出)中操作,其中元素仅从容器的一端插入和提取。堆栈被实现为容器适配器,这些类使用特定容器类的封装对象作为其底层容器,提供一组特定的成员函数来访问其元素。 元素从特定容器的“后部”(称为堆栈的顶部)推送/弹出。标准容器类 vector、deque 和

2021-09-17 21:42:15 163

原创 C++_STL——queue(and priority_queue)

C++_STL——queue(and priority_queue)queue:template <class T, class Container = deque<T> > class queue;先进先出队列参数:T:元素类型Container:存储元素的内部底层容器对象的类型。1、构造函数std::queue::queueinitialize (1)explicit queue (const container_type& ctnr);

2021-09-14 15:57:28 383

原创 C++_STL——list(and forward_list)

C++_STL——list(and forward_list)1、类模板template < class T, class Alloc = allocator<T> > class list;1.1容器属性容器属性序列序列容器中的元素以严格的线性顺序排序。单个元素按其在此序列中的位置访问。双向链表每个元素保留有关如何定位下一个和前一个元素的信息,允许在特定元素(甚至整个范围)之前或之后进行恒定时间插入和擦除操作,但不能直接随机访问。分配器

2021-09-13 14:45:34 226

原创 【每日一题】502. IPO

502. IPO题目描述:假设 力扣(LeetCode)即将开始 IPO 。为了以更高的价格将股票卖给风险投资公司,力扣 希望在 IPO 之前开展一些项目以增加其资本。 由于资源有限,它只能在 IPO 之前完成最多 k 个不同的项目。帮助 力扣 设计完成最多 k 个不同项目后得到最大总资本的方式。给你 n 个项目。对于每个项目 i ,它都有一个纯利润 profits[i] ,和启动该项目需要的最小资本 capital[i] 。最初,你的资本为 w 。当你完成一个项目时,你将获得纯利润,且利润将被添加

2021-09-08 14:00:22 161

原创 【每日一题】二分查找

704. 二分查找????最近新创建了个开源仓库,总结LeetCode的每日一题,目前已有C++、JavaScript语言版本,欢迎大家提供其他语言版本!????仓库地址:每日一题系列题目描述:给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。示例1:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4示例2:

2021-09-06 20:17:14 142

原创 【每日一题】剑指 Offer 10- I. 斐波那契数列

剑指 Offer 10- I. 斐波那契数列????最近新创建了个开源仓库,总结LeetCode的每日一题,目前已有C++、JavaScript语言版本,欢迎大家提供其他语言版本!????仓库地址:每日一题系列题目描述:写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐

2021-09-04 19:00:00 121

原创 【每日一题】剑指 Offer 22. 链表中倒数第k个节点

剑指 Offer 22. 链表中倒数第k个节点????最近新创建了个开源仓库,总结LeetCode的每日一题,目前已有C++、JavaScript语言版本,欢迎大家提供其他语言版本!????仓库地址:每日一题系列题目描述:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1-&

2021-09-03 15:17:01 146

原创 【每日一题】 面试题 17.14. 最小K个数

面试题 17.14. 最小K个数????最近新创建了个开源仓库,总结LeetCode的每日一题,目前已有C++、JavaScript语言版本,欢迎大家提供其他语言版本!????仓库地址:每日一题系列题目描述:设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。示例:输入: arr = [1,3,5,7,2,4,6,8], k = 4输出: [1,2,3,4]解答:C++:方法一优先队列 可以看295. 数据流的中位数class Solution {public:

2021-09-03 15:14:30 120

原创 【每日一题】比较版本号

165. 比较版本号????最近新创建了个开源仓库,总结LeetCode的每日一题,目前已有C++、JavaScript语言版本,欢迎大家提供其他语言版本! ????仓库地址:每日一题系列题目描述:给你两个版本号 version1 和 version2 ,请你比较它们。版本号由一个或多个修订号组成,各修订号由一个 ‘.’ 连接。每个修订号由 多位数字 组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从 0 开始,最左边的修订号下标为 0 ,下一个修订号下标为 1 ,以此

2021-09-01 15:46:27 434

空空如也

空空如也

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

TA关注的人

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