![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 95
收录C++内容
CaTianRi
生于忧患,死于安乐
展开
-
[C++] 从零实现一个ping服务
ping命令,因为其简单、易用等特点,几乎所有的操作系统都内置了一个ping命令。如果你是一名C++初学者,对网络编程、系统编程有所了解,但又没有多少实操经验的话,不妨来尝试动手实现一个属于自己的ping命令。这样一来,也能提高你对系统编程、网络编程的能力。本篇文章实现了一个简易的ping指令,其对系统编程、网络编程都有所涉及,但真实的ping指令可远不止这么简单,感兴趣的读者可以通过访问Linux开源项目来了解真正的实现。原创 2024-06-13 20:24:14 · 1161 阅读 · 2 评论 -
【c++】线程池的原理及实现
不知道各位是否有试过点进限时抽奖网站、抢票网站呢?你是否好奇过一个网站、游戏是如何实现数十万、百万用户一起进行访问呢?其实这类软件的背后的服务器总是离不开一个叫做线程池的设计,而这就是本文将讲解的内容,学习如何设计线程池,是每个后端程序猿的必修课之一。掌握如何编写一个高效、安全的线程池对一个后端程序员来讲就像是西方不能没有耶路撒冷,毕竟如果要开发一个高并发需求的程序,例如抢票网站,服务器速度更不上、或者出现了线程安全,到时候用户就要寄律师函了。主页C++github。原创 2024-05-09 08:14:34 · 771 阅读 · 2 评论 -
「C++」掌握C++异步编程
异步任务是多线程编程的核心,若想学习多线程设计,深入了解这些基本概念是必不可少的。如果你从未了解过这些概念,亦或者对c++异步任务的库函数有所遗忘了,不妨点进本文来学习一下。原创 2024-04-18 18:48:17 · 879 阅读 · 0 评论 -
【c++】c++线程库的基本使用
在C++线程库推出之前,如果要实现跨平台多线程,那么我们就得需要直到每个平台的线程API的知识,这无疑对每个程序员都是不小的挑战,毕竟大部分人都不愿意去一一学习这些接口,而线程库的推出,封装了线程底层的实现,不仅提高了代码的可移植性,还减少了C++的学习压力。功能类别关键特性描述线程管理抽象系统级线程,简化线程创建和管理。基础同步mutexlock_guard提供基本的线程同步机制,如互斥锁,以及自动锁管理工具。高级同步使线程能在特定条件下挂起和唤醒,优化资源利用和线程协调。C++20新特性。原创 2024-04-09 14:35:22 · 773 阅读 · 0 评论 -
【Linux】多线程编程基础
无论你是否为程序员,相信多线程这个词汇应该都有所耳闻,像是在某个优化很差的游戏中听闻这游戏甚至是单线程的,如果你对多线程感兴趣,不妨点进本文来学习多线程编程,即使没有深厚的C/C++编程基础,你也能到本文学习到如何编写多线程程序。创建锁// 初始化锁 pthread_mutex_t 用于声明互斥量(mutex)对象。原创 2024-03-21 22:18:40 · 1146 阅读 · 0 评论 -
【c++】特殊类的设计
你可听说过只能在堆上创建的类、无法被拷贝的类、甚至是不能继承的类,如果你从未听闻过这样的奇妙的类设计,不妨点进本篇文章,来进入学习设计模式的第一步。设计模式是前人总结出来的开发模板,每一个程序员都应该对它们有所了解,设计模式大致分为三类:创建型、结构型、行为型,本篇介绍了创建型的单例模式,但细算设计模式,一共有23种之多,这些设计模式让我们日后再谈。单例模式类型饿汉模式懒汉模式在程序启动时就完成了单例的初始化,保证了线程安全。实现简单。单例实例在需要时才被创建,可以节省资源。原创 2024-03-12 16:47:26 · 1203 阅读 · 0 评论 -
【c++】智能指针
在C++编程中,因为各种栈溢出、堆内存泄露、野指针等问题,C++程序员对内存的管理可谓是家常便饭,但即使如此,我们也会犯错,然后被那一大堆难以跟踪的错误打个猝不及防。于是乎,C++11引入了智能指针,其能够自动管理指针的生命周期,不再需要我们手动释放,简化了内存管理的复杂性。智能指针是为了实现RAII。原创 2024-03-11 11:28:57 · 991 阅读 · 0 评论 -
「C++」C++11新特性
C++标准10年磨一剑,于2011年迎来了它真正意义上的第二个标准,C++11能更好地适用与系统开发和库开发,语法与更加的繁华与简单化,本篇文章将重点介绍其中的右值引用lambda表达式包装器。主页C++github。原创 2023-12-03 23:24:46 · 236 阅读 · 1 评论 -
「C++」位图和布隆过滤器
位图可以将数据压缩,但只适用与整形或能转化成整形的数据。布隆过滤器可以找到一定不存在的数据,但对于存在的数据具有误判率,且一般不能删除元素。主页C++github。原创 2023-12-03 19:03:54 · 362 阅读 · 0 评论 -
「C++」哈希表的实现(unordered系底层)
unorered系列是C++中使用关联系容器优点缺点闭散列实现简单容易导致数据堆积开散列存储开销减少如果数据过于集中,会导致查找性能上的损耗主页C++github。原创 2023-12-02 16:53:47 · 374 阅读 · 1 评论 -
「C++」红黑树的插入(手撕红黑树系列)
作为一名程序员相信你一定有所听闻红黑树的大名,像是手撕红黑树这样的名梗已经几乎传遍了程序员之间,如果你还不会“手撕”红黑树,那么本文将会教会你如何“手撕”红黑树。在进入插入操作前,得先定义好树的节点。因为树的插入需要用到父节点、甚至祖父节点,所以为了方便插入,二叉树的节点新增了父节点的指针。enum Color //颜色的定义RED, //0BLACK //1struct RBTreeNode //红黑树节点的定义//节点的左孩子//节点的右孩子//节点的双亲Color _col;原创 2023-11-28 23:19:19 · 179 阅读 · 4 评论 -
「C++」AVL树的实现(动图)
AVL树又名高度平衡的二叉搜索树,由G. M. Adelson-Velsky和E. M. Landis发明,顾名思义,其任意节点的左右子树最大高度差都不超过1,以此来阻止二叉搜索树退化成为单叉树这种情况。任意节点的左右子树最大高度差不超过1所有节点的左节点都比父节点小。所有节点的右节点都比父节点大。它的左右子树都是AVL树。中序遍历是有序的因为我们需要频繁去调整树的平衡,使用普通的二链结构会比较难以控制节点,所以我使用了三叉链的结构,多增加了一个指向父节点的指针。, _kv(kv)原创 2023-11-21 13:57:59 · 216 阅读 · 2 评论 -
「C++」map和set的使用介绍
stl容器分为两类,分别是序列容器和关联式容器,学习关联式容器可以帮助我们去解决去重等问题。主页C++github。原创 2023-11-18 10:49:23 · 74 阅读 · 2 评论 -
「C++」虚函数与多态
虚函数是为了实现多态而实现的功能,被virtual所修饰的成员函数就被称为虚函数。class A {// 图片多态又分为动态与静态。在程序编译期间确定了程序的行为,例如函数重载动态多态:在程序运行期间,根据具体拿到的类型确定程序具体的行为,调用具体的函数。多态调用需要使用基类指针或引用去指向派生类的对象,拥有虚函数的对象都会有一个虚表指针来指向其虚函数。主页C++github。原创 2023-11-16 18:29:33 · 366 阅读 · 4 评论 -
「C++」二叉搜索树的实现(动图)
你是否有听说过二叉搜索树呢,如果你没有学习过二叉搜索树,你可以从本篇文章学习到二叉搜索树的知识。原创 2023-11-16 12:49:20 · 296 阅读 · 1 评论 -
【C++】继承与菱形继承
面对对象编程的重要目的之一就是减少代码的重复使用,而继承便为了这个目标而实现的功能。继承通过限定访问符 :来进行定义继承有三种方式去继承,分别是公有继承、保护继承、私有继承。不同继承方式的区别:类成员public继承protected继承private继承基类的public成员派生类的public成员派生类的protected成员派生类的private成员基类的protected派生类的protected成员派生类的private成员派生类的private成员。原创 2023-11-15 13:12:00 · 256 阅读 · 0 评论 -
「C++」priority_queue的模拟实现
不知你是否有听说过priority_queue,它是C++的内置类,又名优先级队列。学习其能帮助你解决许多按照优先级排序的问题。如果你还没有学习过优先级队列,那么本文将带领你走向其第一步。priority_queue可以使用deque或vector作为其底层实现的适配器。适配器是一种设计模式,用于将一个接口转换成另一个接口,以便不兼容的类可以协同工作。著名的stl标准库中也使用了适配器模式,如queue、stack、priority_queue等模板类就是如此。需要完整代码,可以到我的github去取。原创 2023-11-15 12:53:09 · 29 阅读 · 0 评论 -
「C++」类的六大默认成员函数
如果一个类为空,那么它真的是空类吗,当然不是的,类无论是否为空,编译器都会为其增加六个默认的成员函数,本文将为你介绍这六个函数类的默认成员函数有构造函数、析构函数、拷贝函数、赋值重载、取地址重载、const取地址重载。主页C++github。原创 2023-11-02 18:24:40 · 279 阅读 · 3 评论 -
「C++」new 和 delete
在C语言中我们使用malloc、realloc、calloc来动态开辟内存空间,虽然在C++里面也能使用它们,但因为C++新增了需要C语言所没有的特性,使得C语言老的那套已经不再适合C++。new 在开辟类的空间时,必定会调用其构造函数, 而delete时会调用其析构函数,但C语言中的malloc与free函数并不会调用。free(a2);结果可得知:A()被调用了10次,~A()被调用了10次性质是否抛出异常。原创 2023-10-31 12:06:10 · 155 阅读 · 2 评论 -
「C++」string类模拟实现
string 是C++早期实现的一个内置容器,那时STL还没有出现,所以string有不少地方会让人感到诧异与不成熟,但即使如此,现在的string也已经成了C++不可却少的一部分。string类是用来表示字符串的对象,提供了一系列用于操作字符串的方法,例如查找子串、连接字符串、比较字符串等。github。原创 2023-11-01 09:12:23 · 28 阅读 · 1 评论 -
「C++」vector的使用介绍
vector是STL库中一个容器,用于操作数组,十分的方便,让我们在学会vector的用法的同时不妨学习一下它的实现吧。vector是一个模板类,它的内部空间是动态开辟的,并且支持自动扩展空间,当所需空间大于现有空间,就会动态改变。详细请看官方文档vector与顺序表类型,提供了类型数组的访问方式,可以存储任何类型的数据。我们作为程序员不仅要会用STL,也要明理,会写。如果需要完整代码可以到我的github。原创 2023-11-01 14:53:14 · 166 阅读 · 3 评论