自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 进程之间的通信方式总结

管道分为无名管道(匿名管道)和命名管道(FIFO)。无名管道只能用于具有亲缘关系的进程间通信,而命名管道则允许无亲缘关系的进程进行通信。以上就是 Linux 环境下 C++ 常用的进程间通信方式,每种方式都有其适用场景,根据具体需求来选择合适的通信方式。共享内存让多个进程可以访问同一块物理内存区域,是效率最高的 IPC 方式。信号量主要用于进程间的同步和互斥,防止多个进程同时访问共享资源。套接字可用于不同主机间的进程通信,也能用于同一主机上的进程通信。信号是一种异步通信机制,用于通知进程发生了某个事件。

2025-06-01 13:41:06 297

原创 C++的排序指南

摘要:本文介绍了C++中6种常见排序算法及其特性。冒泡排序、选择排序和插入排序的时间复杂度均为O(n²),适合小规模数据;快速排序、归并排序和堆排序的平均时间复杂度为O(nlogn),适合大规模数据。各算法在稳定性、空间复杂度等方面表现不同:冒泡和插入排序稳定但效率较低,归并排序稳定但需要额外空间,快速排序和堆排序不稳定但效率高。实际应用中需根据数据规模、初始状态和稳定性要求选择合适的算法。

2025-05-31 22:44:23 1476

原创 C++单例模式否线程安全

选择实现方式时,优先考虑 C++11 的 Magic Statics,简洁且安全;C++ 单例模式的实现方式多样,核心在于确保一个类仅有一个实例,并提供全局访问点。C++11 标准规定,静态局部变量的初始化在多线程环境下是原子的(每个线程仅初始化一次)。静态变量的初始化在程序启动时完成,且 C++ 标准保证静态变量初始化的线程安全性。通过原子操作和内存屏障确保多线程环境下实例创建的原子性和可见性。通过互斥锁保证实例创建的原子性,但锁的开销影响性能。多线程环境下,若多个线程同时进入。判断,可能创建多个实例。

2025-05-29 20:42:07 605

原创 STL的multimap介绍

摘要:multimap基于红黑树实现,通过自平衡特性保证O(logn)操作效率。其核心特点包括:允许存储重复键(通过比较函数判定相等),中序遍历保持有序性,重复键按插入顺序排列。与map不同,multimap不检查键唯一性,不支持[]运算符。红黑树的选择确保了高效稳定的插入、删除和查找操作,使multimap成为处理"一对多"关系的理想数据结构。实现上采用标准RB树节点结构,通过旋转和变色维持平衡,所有核心操作时间复杂度均为O(logn)。

2025-05-27 20:15:10 1506

原创 小白都能理解的TCP与UDP

TCP和UDP是互联网两大基础通信协议。TCP像寄快递,需建立连接、确认送达、重传丢失数据,保证可靠但速度慢,适用于网页、文件传输等场景。UDP像打电话,直接发送数据不保证送达,速度快但可能丢包,适合视频直播、在线游戏等实时应用。核心区别在于TCP提供可靠传输而UDP追求低延迟,前者用于不能出错的数据传输,后者用于允许少量错误的实时应用。简单来说,需要稳定选TCP,追求速度选UDP。

2025-05-27 19:28:43 411

原创 简单剖析STL之vector

本文深入剖析了C++ STL中vector的实现原理。vector采用连续内存存储元素,通过_start、_finish和_end_of_storage三个指针管理内存,支持动态扩容(通常2倍或1.5倍增长)。其迭代器本质是封装指针,提供随机访问能力。关键操作中,随机访问O(1),尾部插入均摊O(1),中间插入/删除O(n)。扩容会导致迭代器失效。相比原生数组,vector提供自动内存管理但性能略低。优化建议包括预分配内存、使用移动语义等。vector适合频繁随机访问和尾部操作的场景,是C++中高效的动态数

2025-05-24 00:23:08 467

原创 OJ输入神器-stringstream介绍

stringstream 是 C++ 标准库 <sstream> 中的一个类,用于在字符串和其他数据类型之间进行灵活的转换。它结合了 string 和 iostream 的功能,允许像操作输入/输出流一样操作字符串,常用于字符串解析、格式化和类型转换。stringstream 主要分为三种类型:istringstream(从字符串读取数据)、ostringstream(向字符串写入数据)和 stringstream(读写双向操作)。常见用法包括字符串解析(如按空格或逗号分割)、数据类型转换(如将

2025-05-22 10:14:50 392

原创 SQL命令汇总

本文详细介绍了SQL数据查询与操作的基本命令和高级技巧。主要内容包括:1. 数据查询命令,如SELECT、WHERE、AND/OR、IN/NOT IN、BETWEEN、LIKE、IS NULL/IS NOT NULL、EXISTS等,用于基本查询、条件过滤、组合条件、范围匹配、模糊查询、空值判断和子查询存在性判断;2. 结果排序与限制,如ORDER BY、LIMIT、DISTINCT,用于结果排序、限制结果数量和去重;3. 多表关联与合并,如JOIN、GROUP BY、UNION/UNION ALL,用于表

2025-05-19 14:06:07 822

原创 C++ map的多建映射技巧

在C++中实现多键映射(如(int,int,int,int)->int)有多种方法,每种方法都有其优缺点。常见方案包括:1. 使用嵌套map,优点是无需自定义哈希或比较函数,但代码冗长且效率低;2. 使用自定义结构体+map,结构清晰但需手动实现operator<;3. 使用自定义结构体+unordered_map,平均插入/查找时间为O(1),但需实现哈希函数和operator==;4. 使用tuple作为键,代码简洁但键的可读性较差;5. 使用一维索引,适用于键范围较小且连续的场景,但空间复

2025-05-19 11:04:12 1595

原创 常见问题:i++和++i的区别

尤其在处理迭代器或自定义类型时,既能保证性能,又能减少潜在的逻辑错误。在处理大量元素时,后置自增可能显著慢于前置自增。(尤其对迭代器或自定义类型),原因在于。都是自增运算符,但它们的。:在循环中若无特殊需求,均可使用,但习惯上更推荐。

2025-05-19 10:45:22 506

原创 堆排序,局部性原理与缓存有害

两个阶段,均基于数组实现(堆通常用数组存储,父节点 i 的子节点为 2i+1 和 2i+2)。

2025-05-19 10:33:03 434

原创 effective C++(准则三)

介绍了effective C++的准则三

2024-05-24 11:30:21 208

原创 effective C++(准则一和二)

最近在读C++书籍,打算更一下自己理解的effective C++

2024-05-23 21:18:06 407 1

空空如也

空空如也

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

TA关注的人

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