自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++无锁队列

无锁队列(Lock-Free Queue)是一种在多线程环境下实现的队列数据结构,它不依赖传统的锁机制(如互斥锁 std::mutex)来保证线程安全。而是通过原子操作(如 std::atomic 提供的操作)和内存屏障来确保多个线程可以同时对队列进行入队(enqueue)和出队(dequeue)操作,且不会出现数据竞争和不一致的问题。

2025-03-10 01:28:47 1085

原创 DeepSeek本地部署教程

DeepSeek本地部署教程

2025-02-13 01:20:50 1399

原创 手写图-邻接表

下面是一个完整的C++实现手写邻接表表示图的代码。邻接表是一种常见的图的表示方法,其中每个顶点维护一个链表,链表中存储与该顶点直接相连的其他顶点。

2025-02-11 03:05:14 304

原创 手写图-邻接矩阵

下面是一个完整的C++实现手写邻接矩阵表示图的代码。邻接矩阵是一种常见的图的表示方法,其中矩阵的行和列分别代表图中的顶点,矩阵中的值表示顶点之间是否存在边。

2025-02-11 03:01:39 168

原创 手写平衡二叉树 (AVL树)

下面是一个完整的C++实现手写平衡二叉树(AVL树)的代码。AVL树是一种自平衡二叉搜索树,其中每个节点的左右子树高度差不超过1。

2025-02-11 02:53:29 204

原创 手写二叉搜索树 (BST)

下面是一个完整的C++实现手写二叉搜索树(BST)的代码。二叉搜索树是一种二叉树,其中每个节点的左子树包含的值小于该节点的值,右子树包含的值大于该节点的值。

2025-02-11 02:47:52 168

原创 手写最大堆

下面是一个完整的C++实现手写最大堆的代码。最大堆是一种完全二叉树,其中每个节点的值都大于或等于其子节点的值。

2025-02-11 02:43:55 201

原创 手写最小堆

下面是一个完整的C++实现手写最小堆的代码。最小堆是一种完全二叉树,其中每个节点的值都小于或等于其子节点的值。

2025-02-11 02:41:03 150

原创 手写哈希表

下面是一个简单的C++实现手写哈希表的完整代码。这个哈希表使用链地址法(Chaining)来处理哈希冲突。

2025-02-11 02:36:46 197

原创 C++11新特性之线程async

强制在新线程中异步执行。延迟执行,直到调用 get 或 wait。由实现决定是否创建新线程或延迟执行。要执行的函数。函数的参数。std::async是更高层次上的异步操作,它的存在可以使开发者不用关注线程创建内部细节,就能方便的获取异步执行状态和结果,还可以指定线程创建策略,应该用std::async替代线程的创建,让它成为做异步操作的首选。使线程的创建变得非常简单,还可以获取线程id等信息。std::mutex。

2024-12-14 02:36:37 1223

原创 C++11新特性之线程std::future

std::future 是 C++11 引入的标准库中的一种模板类,用于实现线程间的异步操作结果的获取。它是标准库 中的一部分,配合 std::async、std::promise 等工具使用。

2024-12-13 01:32:41 880

原创 C++11新特性之线程condition_variable

std::condition_variable 是 C++ 标准库中的同步机制,用于线程间的通信和协作,主要用来让一个线程等待某个条件发生(通常是由其他线程通知)。它是基于信号量的高级封装,配合互斥锁(std::mutex)和条件标志(通常是布尔值或其他标志变量)一起使用。

2024-12-13 01:15:35 366

原创 C++11新特性之线程volatile

volatile关键字用于声明一个变量可能被外部事件(如硬件中断、另一个线程等)修改。通常用于嵌入式编程和多线程编程中。

2024-12-13 00:45:23 251

原创 C++11新特性之线程std::call_once

std::call_once 是 C++11 标准引入的一种工具,用于确保某段代码只被执行一次,通常用于实现线程安全的单例模式或初始化操作。它结合了 std::once_flag 使用。

2024-12-11 01:40:27 382

原创 C++11新特性之线程std::atomic

定义一个初始值为 0 的原子整型变量。

2024-12-11 01:30:49 458

原创 C++ 强制类型转换

强制类型转换用于转换不同数据类型之间的数据,例如从整型到浮点型,或者从基类指针到派生类指针等。

2024-12-11 01:17:47 310

原创 C++11新特性之线程std::lock

std::lock 是 C++ 标准库中的一个工具函数,用于同时锁定多个锁对象(通常是 std::mutex 或 std::unique_lock),以避免死锁问题。std::lock 位于头文件 中,定义如下:功能它采用了一种算法(如 层次锁排序算法),确保在锁定多个互斥量时不会发生死锁。该函数会尝试锁定提供的所有锁对象(以 不可中断的方式),直到全部成功。支持任意数量的锁,至少需要两个。std::lock参考代码以下是一个完整的代码示例,展示如何使用 std::lock 来同时锁定两个

2024-12-10 00:53:01 392

原创 C++11新特性之线程std::mutex

std::mutex 是 C++ 标准库提供的一种用于多线程编程的互斥量(mutex)。它定义在头文件 中,主要用于保护共享数据,防止多个线程同时访问而引发数据竞争。

2024-12-10 00:17:40 1172

原创 C++11新特性之线程std::thread

是C++11引入的标准库类,用于创建和管理线程。通过std::thread,程序可以并发执行多个任务,从而提高效率。

2024-12-09 23:57:36 1066

原创 C++ 列表初始化initializer_list

列表初始化是用花括号 {} 提供初始值来初始化变量或对象。初始化简单变量初始化结构体或类初始化标准容器(如std::vector、std::array等)统一初始化方式,取代传统的构造函数或等号赋值。

2024-12-09 01:37:21 495

原创 C++ 类型别名using

在C++中,using 关键字用于简化代码、减少冗余,提高代码可读性。

2024-12-09 01:19:33 585

原创 C++返回值优化

C++中的返回值优化(Return Value Optimization, RVO)是编译器为了提高代码运行效率而进行的一种优化技术。RVO允许编译器将临时对象的构造过程优化为直接返回该对象,而不是拷贝或移动。通过这种方式,可以减少对象的拷贝开销,从而提高程序性能。

2024-12-09 01:02:23 360

原创 C++移动语义move

1移动语义的核心是利用右值引用(T&&)和标准库中的std::move,使对象的资源从一个对象转移到另一个对象,而不是拷贝,从而提高程序性能。减少临时对象的开销(如函数返回大对象)。避免深拷贝(如容器中的数据转移)。使用右值引用(T&&)定义移动构造函数和移动赋值运算符。移动语义可以避免冗余的深拷贝操作,提高程序效率。使用std::move显式启用移动语义。

2024-12-08 23:34:18 702

原创 C++完美转发和左值右值

这段代码主要演示了C++中值类别(左值和右值)的处理,以及std::forward和std::move在模板编程中的用法。通过PrintV函数,代码分别打印参数是左值还是右值。std::forward 用于在模板中精确传递值类别(左值或右值)。std::move 用于将变量强制转换为右值。在模板中处理值类别时,需要小心参数传递方式,确保符合预期的行为。

2024-12-08 22:20:00 811

原创 C++ 左值引用和右值引用的区别和联系

在这个例子中,str是一个左值,printLvalue函数接受一个左值引用参数lvalueRef,并打印出字符串内容。在这个例子中,std::move(str)将str转换为右值引用,并传递给printRvalue函数。注意,std::move并不移动数据,它只是将左值转换为右值引用,从而允许函数使用移动语义(如果函数支持的话)。直接传递字符串字面量"Temporary string"也是右值引用的一种情况。

2024-12-08 11:50:24 286

原创 C++11右值引用

下面是一个关于 C++11 右值引用(Rvalue References)的完整示例代码,涵盖了右值引用的基本概念、std::move、以及如何使用右值引用实现移动语义。移动构造函数:将资源(内存、数据)从临时对象转移到新对象中,并将临时对象的数据指针置空。使用 std::move 将一个右值对象的资源转移到当前对象,并释放当前对象的资源。std::move 并不真正移动对象,它只是将左值转化为右值引用,从而启用移动语义。默认构造函数:分配内存并初始化。带参数构造函数:给对象赋初值。释放动态分配的内存。

2024-12-08 02:16:21 190

原创 C++11智能指针

在 C++11 中,智能指针是用来管理动态分配内存的类模板,它可以避免手动管理内存中的指针,减少内存泄漏的风险。

2024-12-08 01:48:12 162

原创 Linux 进程间通信

进程间通信(IPC,Inter-Process Communication)在 Linux 下常用的方法包括:1)管道(Pipe)2)有名管道(FIFO)3)消息队列(Message Queue)4)共享内存(Shared Memory)5)信号量(Semaphore)6)套接字(Socket)

2024-12-08 01:02:02 354

原创 Java线程池

创建和销毁线程非常损耗性能。通过创建线程池,可以复用创建好的线程。线程的创建需要开辟虚拟机栈、本地方法栈、程序计数器等线程私有的内存空间,在线程销毁时需要回收这些系统资源,频繁地创建销毁线程会浪费大量资源,而通过复用已有线程可以更好地管理和协调线程的工作。二、 线程池提供了一种资源限制和管理的手段,比如可以限制线程的个数,动态新增线程等。一、 当执行大量异步任务时线程池能够提供很好的性能。

2024-08-20 20:12:37 218

原创 求最大的公共字符串

写一个C++的函数,输入两个字符串,输出其中的长度最大的公共字符串(若有多个,取最后一个)。例如输入"ababcdef",“abxyzabck”, 输出"abc"

2023-05-31 22:40:27 370

原创 手写vector

在这个代码中,实现了以下操作:push_back:将新元素添加到向量的末尾。pop_back:从向量的末尾删除最后一个元素。操作符[]:允许通过索引访问元素。getSize:返回向量中元素的数量。getCapacity:返回向量分配的内部数组的大小。析构函数:释放内存。

2023-05-26 01:47:50 917

原创 手写红黑树

该程序实现了红黑树的插入和中序遍历操作。在每次插入节点时,都会通过左旋、右旋和颜色翻转等操作来维持红黑树的性质。

2023-05-26 01:18:05 968

原创 手写平衡二叉树

在这个实现中,Node 类表示二叉平衡树的节点。每个节点包含一个 key 值,一个指向左子树的指针 left,一个指向右子树的指针 right,以及一个表示该节点的高度 height。max 函数返回两个数中的最大值,height 函数返回给定节点的高度。newNode 函数创建一个新的具有给定 key 值的节点,并将其左右子树和高度初始化为 NULL。该程序实现了二叉平衡树的插入和中序遍历操作。在每次插入节点时,都会检查当前子树是否平衡,并进行相应的旋转操作以维持平衡。

2023-05-26 01:02:46 162

原创 手写单链表

这里我们定义了一个 Node 结构体来表示链表的节点,其中包含了一个 data 成员变量表示节点的数据,以及一个 next 指针成员变量表示下一个节点的地址。在上面的代码中,我们实现了以下三个基本操作:insertAtHead:在链表头部插入一个节点;insertAtTail:在链表尾部插入一个节点;deleteNode:删除链表中指定值的节点。其中,插入操作需要创建一个新的节点,并将其加入到链表中,而删除操作则需要找到要删除的节点,并修改其前一个节点的 next 指针。

2023-05-25 22:39:04 1290

原创 手写队列queue

这里我们使用了循环数组来实现队列,利用取模运算可以使队列的循环利用。在入队操作时,如果队列已满则输出错误信息;在出队操作和获取队首元素时,如果队列为空则同样输出错误信息。

2023-05-25 21:52:53 246

原创 手写栈stack

模板数据类型实现栈以下是一个基于C++的手写栈的示例代码,包括了栈的初始化、入栈、出栈、获取栈顶元素和判断栈是否为空等常用功能。以上示例代码中,我们使用了一个vector来存储栈中的元素。栈的入栈和出栈操作分别使用了vector的push_back和pop_back方法。获取栈顶元素和判断栈是否为空的操作也很简单,直接使用vector的back和empty方法即可。

2023-05-25 21:40:02 387

原创 二叉搜索树查找指定的值

【代码】二叉搜索树查找指定的值。

2023-05-25 19:47:14 229

原创 vector删除指定元素值

【代码】vector删除指定元素值。

2023-05-25 19:45:17 559

原创 C++11智能指针weak_ptr解决shared_ptr循环引用问题

【代码】C++11智能指针weak_ptr解决shared_ptr循环引用问题。

2023-05-16 00:45:41 193

原创 vscode编译的时候:未定义标识符 thread

未定义标识符 thread。

2023-05-14 23:53:10 2145 1

空空如也

空空如也

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

TA关注的人

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