C++ 数据结构和 STL
数据结构
数据结构用于存储和组织数据。一个 数组 是一个数据结构的例子,它允许在单个变量中存储多个元素。
C++ 还包含许多其他的数据结构,每一种都用于以不同的方式处理数据。
这些是 C++ STL 的一部分,STL 代表标准模板库。
C++ STL
STL 是一个库,它包含不同的 **数据结构** 和 **算法**,可以有效地存储和操作数据。
如果我们说数据结构存储数据,那么我们可以说算法用于解决不同的问题,通常是通过搜索和操作这些数据结构。
使用正确的数据结构和算法可以使你的程序运行得更快,尤其是在处理大量数据时。
最常见的数据结构是
数据结构 | 描述 |
---|---|
向量 | 像 数组 一样存储元素,但可以动态改变大小。添加和删除元素通常在末尾进行。可以通过索引访问元素。 |
列表 | 按顺序存储元素,每个元素都与下一个元素相连。可以在两端添加和删除元素。不能通过索引访问。 |
栈 | 按照特定顺序存储元素,称为 LIFO(后进先出),元素只能从顶部添加和删除。不能通过索引访问。 |
队列 | 按照特定顺序存储元素,称为 FIFO(先进先出),元素在末尾添加,从头部删除。不能通过索引访问。 |
双端队列 | 在双端队列中存储元素,元素可以在两端添加和删除。可以通过索引访问元素。 |
集合 | 存储唯一的元素。不能通过索引访问。 |
映射 | 以“键/值”对的形式存储元素。可以通过键(而不是索引)访问。 |
使用哪一个取决于你的具体需求。它们有一个共同点,那就是你必须包含相应的头文件才能使用它们。
示例
// 包含向量库
#include <vector>
// 包含列表库
#include <list>
// 包含集合库
#include <set>
// 包含映射库
#include <map>
// 包含栈库
#include <stack>
// 包含队列库
#include <queue>
以下是在包含了 <vector>
库之后使用向量的例子
示例
// 创建一个名为 cars 的向量,它将存储字符串
vector<string> cars = {"Volvo", "BMW", "Ford", "Mazda"};
// 打印向量元素
for (string car : cars) {
cout << car << "\n";
}
试一试 »
后面的章节将解释每个数据结构的工作原理以及如何使用它们。
STL 的关键概念
STL 的关键组成部分包括 **容器**、**迭代器** 和 **算法**,以及它们之间的关系。
- **容器** 是数据结构,它们提供了一种存储数据的方式,例如 向量、列表 等。
- **迭代器** 是用于访问数据结构元素的对象。
- **算法** 包括函数,例如
sort()
和find()
,它们通过 **迭代器** 对数据结构执行操作。
在计算机科学中,数据结构和算法是密不可分的。如果没有使用算法来有效地搜索或操作数据结构,那么数据结构就没有什么价值,而如果没有数据结构,算法也没有什么价值。
在接下来的章节中,您将看到所有这些是如何联系在一起的。