C++ STL (标准模板库)29 Aug 2025 | 13 分钟阅读 在 C++ 中,标准模板库(STL)是一组强大的模板类和函数,提供了通用的数据结构和算法。它允许开发人员使用通用编程组件的经过优化的实现,例如 动态数组、链表、栈、队列、集合、映射 以及各种算法。 简单示例让我们通过一个示例来演示 C++ 中的 STL 函数。 示例编译并运行输出 Sorted numbers: 1 2 4 7 8 解释 在此示例中,vector <int> 是一个存储整数的 STL 容器。Sort() 是一个对 vector 进行排序的 STL 算法。基于范围的语法使用递归来达到并打印循环中的元素。 STL 的特点C++ 中 STL 的几个特点如下:
STL 的类型C++ STL 主要分为四类:
现在,我们将逐一讨论这些 C++ STL 类型。 STL 容器容器可以被描述为保存相同类型数据的对象。容器用于实现不同的数据结构,例如数组、列表、树等。 以下是提供所有容器的详细信息以及它们关联的头文件和迭代器类型的容器:
容器的分类1. 序列容器序列容器按线性顺序存储元素,并允许按索引访问。
C++ 序列容器示例 让我们以一个实例来演示 C++ 中的序列容器。 示例编译并运行输出 Vector elements: 10 20 30 40 50 解释 在此示例中,我们使用元素 {10, 20, 30, 40} 初始化一个 vector,然后使用 push_back() 函数在末尾添加 50。最后,使用基于范围的 for 循环打印所有 vector 元素。 2. 关联容器关联容器以基于键的排序顺序存储元素,并自动维护此顺序。它们将数据组织为键值对,并提供基于键的高效查找、插入和删除。
C++ 关联容器示例 让我们以一个实例来演示 C++ 中的关联容器。 示例编译并运行输出 ID: 101, Name: Alice ID: 102, Name: Bob ID: 103, Name: Charlie 解释 在此示例中,我们采用了一个 map 容器,它以排序顺序存储键值对。它将学生 ID(101、102、103)作为键,将姓名(Alice、Bob、Charlie)作为值插入。最后,它使用基于范围的 for 循环遍历 map,以打印每个 ID 和姓名。 3. 无序关联容器这些容器是 C++ STL 的重要组成部分,它们以不精确的顺序存储元素,并通过哈希表实现快速检索。无序关联容器不维护任何顺序。C++ 中有几个无序关联容器,如下所示:
C++ 无序关联容器示例 让我们以一个实例来演示 C++ 中的无序关联容器。 示例编译并运行输出 Mango: 5 Banana: 20 Apple: 10 Orange: 15 解释 在此示例中,我们使用了一个 unordered_map,它以无序方式存储键值对以实现快速查找。它使用水果名称作为键和它们的计数作为值初始化 map,然后插入“Mango”。最后,它使用基于范围的 for 循环遍历 map,以打印每种水果及其计数。 注意:每个容器类都包含一组可用于操作其内容的函数。C++ 容器示例让我们看一个演示 C++ 中容器的示例。 示例编译并运行输出 Vector elements: 10 20 30 40 50 List elements: 100, 200, 300, 400 Set elements: 5 10 15 20 Map elements: 1 -> One 2 -> Two 3 -> Three 解释 给定的程序演示了 STL 迭代器,它遍历不同的容器(vector、list、set 和 map)。迭代器允许按顺序访问元素,这些元素从 begin() 开始,在 end() 函数结束。vector 和 list 维护插入顺序,set 自动对元素进行排序,map 按键的排序顺序存储键值对。 STL 迭代器在 C++ 中,STL 迭代器是指针状的实体,用于访问容器中的各个元素。迭代器按顺序从一个元素移动到另一个元素。这个过程称为遍历容器。 迭代器主要包含两个函数:
迭代器类别迭代器主要分为五类: 1. 输入迭代器 输入迭代器是一种迭代器,它允许程序通过解引用来读取容器中的值,但不允许修改这些值。它是单向遍历,意味着它只能递增(++),不能递减(--)。输入迭代器通常用于单次遍历算法,其中数据按顺序读取。 2. 输出迭代器 输出迭代器与输入迭代器类似,只是它允许程序修改容器的值,但不允许读取它。它是一个单向迭代器。它是一个只写迭代器。 3. 前向迭代器 前向迭代器使用 (++) 运算符在容器中导航。前向迭代器一次遍历容器的每个元素。 4. 双向迭代器 双向迭代器与前向迭代器类似,但具有附加功能,它可以向前和向后遍历容器。这种双向遍历能力使其可以递增 (++) 和递减 (--),比前向迭代器更通用。 5. 随机访问迭代器 随机访问迭代器可用于访问容器的随机元素。随机访问迭代器具有双向迭代器的所有功能,并且还具有一项附加功能,即指针加法。通过使用指针加法运算,我们可以访问容器的随机元素。 迭代器支持的操作
C++ 迭代器示例让我们看一个演示 C++ STL 中迭代器的示例。 示例编译并运行输出 Input Iterator: 10 100 (Output Iterator writes 100) Forward Iterator: 99 2 3 4 Bidirectional Iterator: 15 After decrement: 10 Random Access Iterator (+2): 30 Random Access Iterator (-1): 20 Random Access Iterator with index: 30 解释 此程序演示了所有类型的 STL 迭代器:输入(只读)、输出(只写)、前向(读/写/递增)、双向(支持 ++, --)和随机访问(+, -, [ ])。使用不同的 STL 容器(vector、list、set)来展示它们各自的迭代器行为。 STL 算法算法是标准模板库(STL)中的预定义函数,它们作用于容器的元素来处理、操作或分析其内容。 注意事项
STL 算法类别
C++ 算法示例让我们看一个演示 C++ STL 中算法的示例程序。 示例编译并运行输出 Found 30 in vector Vector after reverse: 50 40 30 20 10 Vector after sorting: 10 20 30 40 50 Set union: 1 2 3 5 6 7 The sum of vector elements: 150 解释 此程序展示了 STL 算法:find(非变异)、reverse(变异)、sort(排序)、set_union(集合算法)和 accumulate(关系)。这些函数简化了对 vector 和 set 等容器的操作。该程序高效地执行搜索、修改、排序、合并和数值运算。 STL 函数对象函数对象也称为“functor”。函数对象是一个包含至少一个 operator() 函数定义的类。这意味着,如果我们声明一个具有 operator() 函数定义的类的对象 'd',我们可以像常规函数一样使用对象 'd'。 语法 它具有以下语法: C++ 函数对象示例让我们看一个演示 C++ STL 中 Functors 的示例。 示例编译并运行输出 Vector after multiplication by 3: 3 6 9 12 15 解释 此程序定义了一个 Functor MultiplyBy,它使用 operator() 将每个元素乘以给定的因子。STL transform() 算法将 Functor 应用于 vector 的所有元素,从而高效地修改它们。Functor 通过允许自定义操作(如乘法)使算法更具灵活性。 C++ STL 选择题1. 在 C++ 中使用 STL 的主要优势是什么?
答案:b) STL 的实现提供了经过彻底测试的可重用组件。 2. 如果您尝试向 set 中插入重复元素,会发生什么?
答案:c) 重复插入的尝试不会改变数据存储。 3. 以下关于 STL 中 map 容器的陈述哪项是正确的?
答案:c) 系统存储唯一的键值组合。 4. 如果您向 set 中插入重复元素,会发生什么?
答案:d) 重复项将被忽略。 5. 以下关于 STL 的陈述哪项是错误的?
答案:c) STL 算法能够修改其包含元素的大小。 下一个主题C++ Vectors |
在 C++ 中,队列代表基本数据结构,它们根据先进先出(FIFO)逻辑运行。C++ 的标准模板库(STL)通过其现成的组件提供了一个队列类,这些组件可提高队列操作的效率。队列是一种线性数据结构,它通过队列处理元素……
11 分钟阅读
在 C++ 中,map 是 STL(标准模板库)的一部分。Map 是关联容器,它们存储排序的键值对,其中每个键都是唯一的,可以插入或删除,但不能修改。与键相关联的值可以更改。语法是……
阅读 13 分钟
s 在 C++ 中,vector 是标准模板库(STL)的一部分。它们是动态数组,在添加或删除元素时可以自动调整大小。与具有固定大小的数组不同,vector 提供了广泛的灵活性和底层函数,这些函数……
11 分钟阅读
在 C++ 中,priority_queue 是 STL 中的一个派生容器,它只考虑优先级最高的元素。队列遵循 FIFO 原则,而 priority_queue 根据优先级弹出元素,即最高优先级的元素首先弹出。它类似于……
阅读 10 分钟
C++ STL Set 在 C++ 中,set 代表基本数据结构,它以某种排序顺序排列唯一元素并存储它们。集合称为关联容器,唯一排序的元素称为排序键。我们可以插入或……
阅读9分钟
在 C++ 中,std::list 是一个序列容器,它允许元素的非连续存储。它实现为双向链表,其中每个元素包含前一个和后一个列表元素的地址。它允许我们将数据存储在……
阅读 15 分钟
在 C++ 中,stack 是一种线性数据结构,它遵循后进先出(LIFO)原则执行操作。这意味着最后添加的元素将首先被删除,而最后添加的元素最后被删除。在 C++ 中,STL 提供了一个……
阅读9分钟
在 C++ 中,bitset 是一个包含固定大小位序列(0 和 1)的容器。它使我们能够有效地管理和操作固定大小的位序列。它适用于低级操作、内存高效存储和位逻辑。它实现为……
11 分钟阅读
在 C++ 中,multimap 是 C++ STL(标准模板库)的一部分。Multimap 是像 map 一样的关联容器,它们存储排序的键值对,但与只存储唯一键的 map 不同,multimap 可以有重复的键。默认情况下,它使用 (<) 运算符进行比较……
阅读 13 分钟
在 C++ 中,deque(双端队列)是一种队列,其中可以在队列的前端和后端添加和删除元素。它支持 FIFO 和 LIFO 操作,这比队列提供了更大的灵活性。在 C++ 中,STL deque 是一个序列容器,它……
11 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India