自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(82)
  • 收藏
  • 关注

原创 【C++ STL】unordered_map&unordered_set (哈希表)

哈希也叫做散列,记数排序就体现了哈希思想。计数排序为统计数字出现的个数,为每个数字都开辟了对应的一块空间,用来记录其出现的个数,每遇到就加一。将一个元素和一个位置建立映射关系,这就是哈希的本质。常见的数据类型如整数,库中自带哈希函数,但有些类型比如自定义类型,需要我们自定义哈希函数。可以把哈希函数设计成仿函数,对不同类型添加特化处理。return key;// 特化template<>//BKDRreturn val;

2024-08-08 11:43:27 1117

原创 【C++ STL】priority_queue

只需将堆顶元素逐步向下调整:将根结点与其较大/小的子结点交换,只要父结点比子结点中任意一个大/小,就进行交换,直到交换到叶结点或不满足条件为止。此时堆的性质可能被破坏,不过只会影响该结点到根结点所在路径上的所有结点,故顺势向上调整:一直交换结点数值直到满足堆的性质即可。仿函数相当于更高级的泛型,使用仿函数能够改变执行逻辑,仿函数内部的实现完全由用户自定,拥有极大的自定义空间。比较大小操作符写死不便用户修改,使用宏定义,函数指针都比较复杂,还有一种简单的方式就是仿函数。操作符模仿函数的调用方式。

2024-08-08 10:52:13 670

原创 【C++ STL】deque

vector是单向开口的连续线性空间,deque是一种双向开口的连续线性空间。双向开口就是说deque支持从头尾两端进行元素的插入和删除操作相比于vector的扩容空间的方式,deque实际上更加贴切的实现了动态空间的概念。deque没有容量的概念,因为它是动态以分段连续空间组合而成,随时可以增加一段新的空间并连接起来。由于要维护这种整体连续的假象,并提供随机存取的接口,也就是说提供random access iterator,避开重新配置,复制,释放的轮回,代价是复杂的迭代器结构。

2024-08-05 12:21:28 691

原创 【C++ STL】stack&queue

是⼀种先进后出的数据结构,只有⼀个出口,stack 允许从最顶端新增元素,移除最顶端元素,取得最顶端元素。deque 是双向开口的数据结构,所以使⽤ deque 作为底部结构并封闭其头端开口,就形成了⼀个stack。栈的插入被称为压栈、进栈、入栈,删除被称为出栈、弹栈。后进先出,先进后出,LIFOLIFOLIFO原则(Last In First Out)。

2024-08-05 12:18:43 1040

原创 【C++ STL】list

list是 C++ STL 中的双向链表容器,它能够高效地支持元素的插入和删除操作,即使在容器中间。每个节点存储数据以及指向前一个和后一个节点的指针,这种特性使得 list 在需要频繁插入和删除元素时表现优秀。与 vector 不同,list 的内存空间不是连续的,因此随机访问效率较低(时间复杂度为 O(n)),但它提供了双向遍历的能力。list 还支持逆向迭代器,允许从尾部向头部遍历列表。

2024-08-04 12:07:51 973

原创 【C++ STL】vector

在C++编程中,vector是一个十分常用且强大的动态数组容器。它能够动态增长和收缩,适应不同大小的数据集合,同时提供了高效的随机访问能力。vector通过动态分配内存来存储元素,支持快速的尾部插入和删除操作,其内部实现保证了连续存储元素,使得对内存的利用更为高效。

2024-08-04 11:55:54 1207

原创 【C++ STL】string

C语言中,字符串以'\0'结尾的一些字符的集合。为操作方便,同时提供了一些关于 str 库函数,但这些库函数和字符串是分离的,并不符合面向对象的思想。string 是 C++ 中管理字符数组的一个类,是 STL中的一个容器,把字符串交由 string 管理,减轻了编程难度。

2024-08-02 13:30:59 818

原创 【C++ STL】 map&set

`std::set` 和 `std::map` 是 C++ 标准库中基于红黑树实现的关联容器。`std::set` 存储唯一的键,并自动排序,适合需要快速查找和排序唯一元素的场景。而 `std::map` 存储键值对,每个键唯一,并按键排序,适用于需要关联值并按键进行检索的应用。它们的实现保证了高效的插入、删除和查找操作,是 C++ 编程中常用的数据结构之一。

2024-08-02 13:18:30 832

原创 【Linux 网络】链路层

链路层主要负责在直接相连的节点之间传输数据。它通过定义数据的帧结构和物理媒介的访问方式,实现了数据的可靠传输。链路层包括了物理寻址、帧同步、流量控制、错误检测与重发等功能,以保证数据在链路上的可靠性和高效性。在以太网等技术中,链路层使用MAC地址进行设备的唯一标识,同时管理数据的发送和接收顺序,确保数据按照正确的顺序和格式被传送到目的地。

2024-08-01 17:08:49 1159 1

原创 【Linux 网络】网络层

IP协议(Internet Protocol,互联网协议),是TCP/IP协议栈中最核心的协议之一,通过IP地址,保证了联网设备的唯一性,实现了网络通信的面向无连接和不可靠的传输功能。

2024-08-01 16:29:50 889

原创 【Linux 网络】传输层

在TCP的ACK和回执数据可以通过一个数据包发送,捎,可以是发送或者接受的数据量减少,从而降低网络通信的延迟,提高网络利用率。如果是这样,这时候的缓冲区中接收区的数据还没能够处理,缓存区的剩余大小就是窗口大小。数据到内核后,具体什么时候发,一次发多少,发送失败怎么办,完全由内核传输层控制。当我们收到确认报文时,窗口左下标移动至确认序号的位置,右下标向后偏移窗口大小长度,可保证发送量在对端接受范围内。传输层是”做决策“的,比如超时重传,确认应答,流量控制,拥塞控制都是TCP协议的传输策略。

2024-08-01 14:12:44 852

原创 【Linux 网络】应用层

HTTPS(超文本传输安全协议)是HTTP的安全版本,通过加密通信确保了数据的保密性和完整性。在HTTPS中,数据在传输过程中经过对称加密、非对称加密和数字签名等多重保护措施,有效防止了中间人攻击和数据篡改的风险。对称加密用于加密数据传输过程中的数据,非对称加密用于在通信开始时进行密钥协商和服务器验证,而数字签名则用于验证数据的完整性和身份认证。CA证书机构颁发数字证书,用于证明服务器和客户端的身份,客户端通过验证证书来确认服务器的真实性。这些安全措施共同构成了HTTPS的最终加密方案,为网络通信提供了高度

2024-08-01 13:14:10 1119

原创 【C++】类和对象

介绍了类和对象的定义、特性、封装、实例化及内存存储方式等内容,深入阐述了面向对象编程的基本原理和C++语言中的具体实现。

2024-07-09 17:19:02 627

原创 【C++】文件处理(IO流)

主要介绍了C++中的文件输入输出操作,包括基本的文件流类型(ifstream、ofstream和fstream)及其用法。文章对比了C语言和C++在文件操作上的不同,展示了如何使用C++标准库进行文件的读取和写入,包括按字符、按行、按块等多种方式。同时,还介绍了字符串流(stringstream)的使用,以及如何对自定义对象进行序列化和反序列化操作,提供了丰富的代码示例,帮助读者深入理解和掌握C++文件操作。

2024-06-24 12:03:31 891

原创 【C++】八大常见的设计模式

本文将讲解几种常见的设计模式,并使用C++编写相应的代码示例。适配器模式将一个类的接口转换成客户端期望的另一个接口,消除由于接口不兼容而导致的类无法一起工作的问题。模板方法模式定义了一个算法的骨架,将一些步骤延迟到子类中实现,使得子类可以重新定义算法的步骤。建造者模式将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。懒汉式单例模式在第一次使用时初始化实例,懒加载,节省资源,但需要考虑线程安全。工厂模式用于创建对象的实例,而不需要指定具体的类。

2024-06-18 15:39:50 2261 1

原创 【MySQL】复合查询和内外连接

本文将深入探讨MySQL中复合查询和表连接的实际应用。我们将通过具体的示例和解释,帮助读者理解和掌握这些关键的数据库查询技术,以及如何在实际项目中有效地运用它们来处理复杂的数据查询和分析任务。

2024-06-18 12:53:31 1082

原创 【MySQL】表的增删查改操作详解

MySQL 表的增删查改操作详解在数据库管理和应用开发中,增删查改(CRUD)操作是最基本且最频繁的任务。CRUD 代表了四种基本的数据库操作:创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)。

2024-06-18 12:41:41 1266

原创 【MySQL】数据类型和表的约束

数据类型和表的约束

2024-06-18 12:16:50 654

原创 【Redis】为什么是单线程?为什么这么快呢?

Redis,作为一款高性能的内存数据库,广泛应用于各类高并发、高性能的场景中。一个常见的问题是,为什么Redis是单线程的?以及在单线程的情况下,Redis为什么还能保持如此高的速度?

2024-06-15 13:06:52 1158 1

原创 【C++】你了解多少种 C++ 输入方法?

不同的输入方法有不同的适用场景和特点。了解这些细微的差别有助于在编程时选择合适的输入方式,以满足不同的需求。希望这篇文章能帮助大家更好地理解和应用cincin.get()getchar()getline()和。

2024-06-06 00:59:19 517

原创 【数据结构】八大排序

排序是一种非常重要的基础算法,在校招和工作中都非常的实用,它在日常生活中无处不在。本章将介绍八大基本排序。所谓排序,就是将一串序列按照某种递增递减的关系,使该序列成为一个有序的序列。常见并实用的排序有如下八种。

2024-06-04 23:18:57 738

原创 【数据结构】二叉搜索树--BST,Binary Search Tree

二叉搜索树是一种重要且常用的数据结构,其节点具有左子树和右子树,且左子树所有节点值小于根节点,右子树所有节点值大于根节点,这种特性使得查找、插入和删除操作非常高效。然而,如果树结构不平衡,会导致性能下降。因此,对于实现二叉搜索树的算法和数据结构有深入了解是至关重要的,同时也需要了解其他优化的数据结构如AVL树、红黑树等。

2024-06-04 22:28:21 883

原创 【Linux 网络】Socket中的心跳机制(心跳包)

在客户端和服务端**长时间没有相互发送数据**的情况下,我们需要一种机制来判断**连接是否依然存在**。直接发送任何数据包可以实现这一点,但为了效率和简洁,通常发送一个空包,这个就是心跳包。

2024-05-29 22:17:17 2867 2

原创 【Redis】持久化操作详解

Redis 提供了多种持久化机制来确保数据的安全性和完整性。RDB 持久化通过生成数据快照来保存数据,恢复速度快但存在数据丢失的风险;AOF 持久化通过记录每次写操作的日志来保存数据,数据持久性高但文件体积大;混合持久化结合了 RDB 和 AOF 的优点,既保证了快速恢复又降低了数据丢失的风险。

2024-05-27 22:10:39 1211

原创 【Linux】Linux信号产生,接受与处理机制

什么是信号?如何产生,怎么处理的?

2024-05-23 22:10:50 1129

原创 【Linux】写时拷贝技术COW (copy-on-write)

肤浅的来说,加载到内存中的程序就叫做进程。但这并不完善。运行中的系统存在大量的进程,操作系统该如何管理这些进程呢?那写实拷贝技术又什么作用呢?

2024-05-20 19:41:24 1562

原创 【C++】STL快速入门基础

STL(Standard Template Library)是一个具有工业强度的、高效的C++程序库,被容纳于C++标准程序库中,是ANSI/ISO C++标准中最新的一部分。STL包含了在计算机科学领域常用的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应用框架,高度体现了软件的可复用性。

2024-05-20 18:04:02 1024

原创 【C++】如何在一个类外访问私有类成员变量

私有成员是封装的一部分,它们只能在类的内部访问。我们如何在类外去访问他们呢?

2024-05-18 12:58:11 1204

原创 【C++】RAII:资源获取即初始化

RAII,全称为Resource Acquisition Is Initialization,由C++之父Bjarne Stroustrup提出,中文翻译为“资源获取即初始化”。Stroustrup说:“使用局部对象来管理资源的技术称为资源获取即初始化。”

2024-05-18 11:39:54 487

原创 【C++】inline 内联函数

通过理解内联函数和虚函数的使用及其特性,可以更有效地优化代码性能,同时保证代码的安全性和可维护性。

2024-05-17 08:50:29 623

原创 【Linux】权限管理

Linux 中默认存在两类用户,一类叫 root 即超级管理员,具有非常高的权限,其他都是普通用户,具有一般权限。这就为你讲讲Linux中权限基础知识。

2024-05-17 08:27:05 834

原创 【Linux 网络】Socket网络套接字

通过理解和掌握这些基础概念和接口,我们可以构建出高效、稳定的网络应用程序。无论是选择UDP还是TCP,重要的是理解它们的特点和适用场景,以及如何根据实际需求设计合适的通信模型。希望本文能够帮助你深入理解UDP和TCP的通信设计,并在实际的网络编程中发挥作用。

2024-05-10 23:21:41 1039

原创 【Linux 网络】网络基础篇

人们在利用计算机工作时,通常都需要多人协作,所以免不了要进行数据交互。没有网络的话数据就需要人来拷贝,这样效率大大降低,所以慢慢的网络就出来了。

2024-05-06 20:47:37 630

原创 【算法详解】位运算

在计算机内部,数是以「二进制(Binary)」的形式来进行存储。位运算就是直接对数的二进制进行计算操作,在程序中使用位运算进行操作,会大大提高程序的性能。

2024-04-29 12:08:58 919

原创 【算法模板】数学基础算法模版

数基础算法模版,总结用来了解和记忆

2024-04-28 21:49:04 935

原创 【数据结构】二叉树

链表和数组都是线性结构,而树是非线性的结构。树是依靠分支关系定义出的一种层次结构。社会亲缘关系和组织结构图都可以用树来形象地表示。

2024-04-27 12:39:09 1724

原创 【Linux】基础指令

使用Linux系统的第一步就是先熟悉Linux的各种指令,之后才能谈Linux的系统编程和网络编程。

2024-04-27 11:48:01 802

原创 【算法模版】数据结构模版

数据结构常用模版,用来学习与记忆

2024-04-24 17:34:21 392

原创 【C++ 】智能指针

智能指针是 C++ 中用于管理动态分配内存的强大工具。它们旨在解决原生指针可能导致的内存泄漏和悬挂指针等问题。智能指针的核心思想是在其生命周期结束时自动释放所管理的内存,从而避免了手动管理内存时可能出现的问题。然而,尽管智能指针是强大而方便的工具,但在使用过程中仍然需要注意一些陷阱,以避免出现意外的错误。

2024-04-23 13:48:29 1067 2

原创 【算法模板】图论基础算法

总结了基本的图论算法模板,用来记忆和背诵,非常实用

2024-04-23 12:54:20 1282

空空如也

空空如也

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

TA关注的人

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