stl

xiangyun613 天前
开发语言·c++·算法·面试·stl
C++ 手撕 shared_ptr:引用计数与控制块到底长什么样?摘要:上一篇我们讲了 shared_ptr 循环引用会导致内存泄漏,weak_ptr 能救场。但面试官一旦追问:“shared_ptr 内部到底是怎么实现的?控制块里存了什么?引用计数为什么要用原子变量?”很多人就卡壳了。本文用 100 行左右的代码,手写一个最小可用的 shared_ptr,把控制块、原子计数和 make_shared 的内存布局一次性讲透。
流年如夢3 天前
c++·stl·queue·stack·priority_queue
stack和queue_介绍、用法及模拟实现stack 是**后进先出(Last In First Out)**的容器适配器,仅支持栈顶一端的插入、删除与访问,不支持遍历与随机访问。默认以 deque 作为底层容器,也可指定 vector、list 作为底层实现
kiracrimson5 天前
开发语言·数据结构·c++·stl
string 容器:从 C 字符串到会自己扩容的类C 语言的字符串本质上是以 '\0' 结尾的字符数组。它能用,但用起来处处要人盯着:问题归纳起来有五个:
xiangyun616 天前
c++·算法·面试·stl·1024程序员节
C++ priority_queue 底层:手撕二叉堆与 Top K 问题摘要:priority_queue(优先队列)是算法题和工程开发中极高频的容器。但当你被问到“它的底层是什么?为什么默认是大堆?为什么底层容器默认是 vector 而不是 deque?”时,很多人只能背出“堆”这个字。本文用一张图拆解二叉堆的上浮与下沉,并手写核心骨架代码,最后用 Top K 问题实战演练。
自信1504130575913 天前
c++·学习·stl
重生之从0开始学习c++之string(下)本文基于命名空间 Confidence,逐个接口模拟实现 std::string,最后讲解拷贝构造与赋值运算符重载的现代写法。
埃伊蟹黄面14 天前
c++·面试·职场和发展·stl
面试常问题目 —— STLC++中有哪些容器,以及具体的底层实现?C++ 常见 STL 容器分为四类。顺序容器中,vector 是动态连续数组,deque 通常是分段数组加块指针表,list 是双向链表
一拳一个呆瓜15 天前
c++·stl
【STL】文件系统导航本文介绍标准库中的跨平台的文件导航系统,<filesystem> 头文件实现了 C++文件系统技术规范 IOS / IEC TS 18822:2015(最终草案文档 N4100:https://wg21.link/n4100)。该头文件提供一系列类型与函数,允许开发者编写平台无关的代码来遍历、操作文件系统。
xiangyun6117 天前
开发语言·数据库·c++·算法·stl·list
C++ list 模拟实现(二):const迭代器与反向迭代器,模板的黑魔法摘要:上一篇我们手撕了 list 的基础骨架,但很多读者留言说被那个 <T, Ref, Ptr> 的三参数模板绕晕了。为什么一个迭代器要传三个参数?const 迭代器是怎么保证数据不被修改的?反向迭代器又是如何“倒着走”的?本文将揭开 STL 泛型编程中最精妙的设计模式。
白杨尚青17 天前
开发语言·c++·stl·仿函数
C++入门篇(十七):priority_queue 完整模拟实现——仿函数、区间建堆与指针特化(附完整代码仓库)这里是白杨。上一篇 stack/queue 篇里,priority_queue 只讲到"用法 + 堆的两个调整"就收尾了。我自己复盘的时候越看越不对劲:构造函数没讲、仿函数没讲、自定义类型只有一个句号、指针陷阱完全没提——对复习党来说,这一块是整篇最"骨架"的。
xiangyun6118 天前
数据库·c++·算法·链表·stl·list
C++ list 模拟实现(一):手撕双向链表,从节点到迭代器摘要:上一篇我们讲了 list 迭代器为什么不是指针,很多读者留言说懂了理论但不知道怎么手写。本文将承接上一篇,手把手带你从零实现一个带头双向循环链表。涵盖节点设计、迭代器封装、核心接口实现。文末附完整可运行代码。
老歌老听老掉牙23 天前
python·stl
基于STL模型的轴向截面轮廓提取与三维可视化方法STL(Stereolithography)文件是三维打印和计算机辅助工程中最常用的网格模型格式之一,其通过一系列三角形面片来近似表示物体表面。在工程分析中,往往需要获取模型在特定轴向位置处的截面轮廓,例如钻头、螺旋桨等回转体或异形件的几何分析。本文从底层原理出发,完整实现了STL文件的自主解析、任意Z高度处截面轮廓的有序提取,以及沿轴向批量截面的三维散点可视化。所有算法均基于纯Python实现,不依赖任何第三方STL库,代码结构清晰且具备工业级实用价值。
白杨尚青1 个月前
开发语言·c++·笔记·算法·stl
C++入门篇(十三):vector(上)——动态数组:构造、空间增长与迭代器失效目录0.1 开篇·导读一、什么是 vector二、构造与定义2.1 四种构造(速查表格)2.2测试代码:
无名猿1 个月前
数据结构·c++·性能优化·stl·标准库
map / set 完全指南:红黑树与有序容器std::map 是 C++ 里最常被用、也最容易被用错的容器。它的核心事实只有一句话:它是一棵自平衡的红黑树(red-black tree),所以 key 永远有序、查找永远是 O(log n)。有序带来范围查询、中序遍历即排序、find 优于 std::find 这些能力;但也带来一个著名陷阱——operator[] 在找不到 key 时会默默插入一个默认值。这篇按「结构 → 只读查表 → 查找写法 → 插入写法 → 范围查询 → 完整示例」的顺序把 map / set 全家讲清楚。
无名猿1 个月前
c++·性能优化·stl·标准库
C++ 查找算法:std::find 与容器成员 find 的性能差距在 map 里找一个 key,有人写成 std::find_if(m.begin(), m.end(), ...),十万个元素就要跑十万次比较;换成 m.find(key),同样十万个元素只要几十次 —— 两者名字里都有 find,复杂度却差了一个数量级。这篇文章从这条落差讲起,把查找族算法的语义、返回值约定和短路口诀一次讲清,重点解释这个落差的根源:STL 算法只拿得到迭代器,看不见容器的内部结构。
无名猿1 个月前
c++·stl·标准库·现代c++
std::variant 完全指南:类型安全的 union 与 std::visit 用法裸 union 是 C 语言留下来的老物件:它能把不同类型的值叠在同一块内存上,但没人记得住当前存的是哪个类型,读错成员就是未定义行为(undefined behavior, UB),编译器一声不吭。C++17 的 std::variant<A, B, C> 把「联合体」和「类型标签」绑成了一个类型,从此读错类型会得到明确的异常或 nullptr,而不是一份随机数据。
无名猿1 个月前
c++·stl·标准库·踩坑记录
C++ 迭代器五分类与失效场景汇总:一张表避开所有 UBstd::sort(lst.begin(), lst.end()) 编译不过,for (int x : v) { if (...) v.erase(...); } 跑起来会崩 —— 这两个问题的根子是同一件事:迭代器不是一种东西,而是分等级的,而且会在容器改动时失效。这篇文章把「迭代器五分类」和「失效规则」两块拼成一张可查的表,以后遇到迭代器相关的报错直接对表。
无名猿1 个月前
c++·性能优化·stl·内存管理·标准库
list 与 forward_list:链表真的比 vector 快吗「中间插入删除用链表,随机访问用数组」这条规则背了很多年,但它只说对了一半。真把十万个 int 分别塞进 std::list 和 std::vector,链表的内存占用是后者的 6 倍,顺序遍历还要慢一个数量级。原因不在复杂度(两者遍历都是 O(n)),而在每个节点的额外指针和缓存局部性(cache locality)。这篇用实测把链表的开销算清楚,也把链表真正不可替代的两个场景——迭代器失效规则与 splice 零拷贝——讲透,最后给一条能直接用的选型结论。
白杨尚青1 个月前
java·开发语言·c++·笔记·stl
C++入门篇(十):string(上)——认识string:构造与三大遍历(一条龙讲透operator[]、迭代器、auto、范围for)目录0.1 概述&序言一、为什么学习string类1.1 C语言字符串的痛1.2 现实中的需求1.3 两个面试题(先感受一下)
星期八不上发条1 个月前
开发语言·c++·stl
智能指针是什么?使用场景,循环引用解决办法,面试回答智能指针是 C++ 标准模板库(STL)中的一种类模板,用于管理动态分配的内存,以确保资源的正确释放,防止内存泄漏。在 C++ 中,动态分配内存是通过 new 操作符完成的,而释放内存则需要使用 delete 操作符。但在复杂的程序中,确保每次 new 后都有对应的 delete 调用是困难的,尤其是在出现异常或早期返回时。
Tairitsu_H2 个月前
开发语言·c++·stl·c++11
[C++] C++11类和STL的新特性C++11中,类新增了移动构造和移动赋值成员函数:如果提供了移动函数,编译器就不会再默认生成拷贝函数。