CC++ & Algorithm

STL

63 个知识点

面向信息学竞赛的C++ STL知识体系,涵盖容器、迭代器、算法、字符串处理、函数对象等标准模板库核心内容

通用63 个知识点

STL概述

5 个知识点

STL简介、三大组件、容器分类、算法概览、时间复杂度

序列容器

5 个知识点

vector、array、deque、list等线性容器的使用与选择

关联容器

5 个知识点

set、map、multiset、multimap与红黑树原理

无序容器

4 个知识点

unordered_set、unordered_map、哈希冲突处理

容器适配器

5 个知识点

stack、queue、priority_queue与堆操作

困难

stack栈适配器——后进先出的“叠盘子”魔法

栈是一种后进先出(LIFO,Last In First Out)的数据结构,就像一摞盘子,最后放上去的盘子最先被拿走。C++ STL中的stack容器适配器基于其他容器(如deque、vector)实现,提供了push(入栈)、pop(出栈)、top(取栈顶)等操作。Python中可以用list模拟栈,或者使用collections.deque。本文将带你用生活中的例子理解栈,并学会在编程竞赛中熟练使用它。

困难

queue队列适配器——先进先出的“排队”魔法

队列是一种先进先出(FIFO,First In First Out)的数据结构,就像在食堂排队打饭——先到的人先打到饭。C++ STL中的queue容器适配器基于deque实现,提供了push(入队)、pop(出队)、front(队首)、back(队尾)等操作。Python中可以用collections.deque高效模拟队列。本文将带你轻松掌握队列的用法。

困难

priority_queue优先队列——VIP插队的“自动排序”魔法

优先队列是一种特殊的队列,元素出队的顺序不是按照入队时间,而是按照优先级——优先级最高的元素最先出队。C++ STL中的priority_queue默认实现是最大堆,即优先级最高的元素在队首。你可以自定义比较器来改变优先级规则。Python中可以使用heapq模块实现最小堆,或者用queue.PriorityQueue。本文将带你掌握优先队列的核心用法,并学会用它解决实际问题。

困难

自定义比较器与堆操作详解——打造专属排序规则

在C++ STL中,priority_queue、sort等算法默认使用less比较器,但我们可以通过自定义比较函数或函数对象来改变排序规则。同时,STL还提供了make_heap、push_heap、pop_heap、sort_heap等底层堆操作函数,让你能够更灵活地使用堆。Python中的heapq也支持自定义比较(通过优先级元组或重写__lt__)。本文将深入讲解自定义比较器的原理及堆操作函数的用法。

困难

容器适配器的底层实现与性能——揭开“包装”的秘密

容器适配器(stack、queue、priority_queue)不是独立的底层容器,而是对现有容器(如deque、list、vector)的封装。了解它们的底层实现有助于我们理解性能特点,并在特定场景下选择最适合的底层容器。本文将剖析stack、queue和priority_queue默认使用的底层容器及其优缺点,并讨论如何自定义底层容器,同时对比Python中常用数据结构的实现。

字符串与流处理

8 个知识点

string操作、查找子串、string_view、字符串流、性能优化

中等

string的基本操作:构造、拼接与遍历

学习如何创建字符串、连接多个字符串以及逐个字符地访问字符串中的每个元素,就像用积木搭火车一样简单。

困难

string的查找与子串操作(find、rfind、substr)

学会在字符串中快速找到指定字符或子串的位置,以及提取字符串的一部分,就像在字典里翻找单词并撕下需要的段落。

困难

string的修改操作:插入、删除与替换

学习如何在字符串的任意位置插入新内容、删除一部分字符、或者把某些字符替换成其他内容,就像用橡皮擦和超级胶水修改作文。

困难

string与数值的相互转换

学习如何把数字转换成字符串(比如把123变成"123"),以及把字符串解析成数字(比如把"3.14"变成小数),这是处理输入输出时的必备技能。

困难

string_view轻量字符串视图

学习一种不复制字符串就能读取其内容的“视野”工具,就像透过透明塑料片看文字,既快捷又不费纸。

困难

字符串流处理(istringstream、ostringstream、getline)

学习如何把字符串当作流(像水流一样)来读写,方便地解析以空格分隔的数据,以及把格式化内容拼成一个字符串。

困难

字符串的分割、合并与格式化

学会如何把一个长字符串按指定分隔符切成小块(分割),以及如何将多个小块用分隔符连起来(合并),还能控制数字的显示格式。

困难

字符串高效处理技巧与性能优化

学习如何写程序时避免不必要的拷贝、选择合适的数据结构、利用 reserve 和移动语义等技巧让字符串处理飞起来。

迭代器

5 个知识点

迭代器分类、反向/插入迭代器、迭代器失效

算法库

6 个知识点

排序查找、修改算法、排列组合、集合算法

函数对象与Lambda

5 个知识点

仿函数、Lambda表达式、std::function、std::bind

工具组件

5 个知识点

pair、tuple、optional、variant、any

数值算法与bitset

5 个知识点

accumulate、inner_product、partial_sum、iota、bitset

STL高级应用

5 个知识点

移动语义、自定义分配器、性能优化、pb_ds扩展