V信公众号: 程序员架构笔记
C++ 标准模板库(STL,Standard Template Library)是 C++ 标准库的一部分,提供了丰富的通用数据结构和算法。STL 的核心组件包括容器、迭代器和算法。以下是对这些组件的简要介绍:
1. 容器(Containers)
容器是用于存储数据的对象。STL 提供了多种容器,分为以下几类:
顺序容器(Sequence Containers)
-
vector:动态数组,支持快速随机访问,尾部插入和删除效率高。 -
list:双向链表,支持高效的插入和删除操作,但不支持随机访问。 -
deque:双端队列,支持在头部和尾部高效插入和删除,支持随机访问。
关联容器(Associative Containers)
-
set:有序集合,元素唯一,基于红黑树实现。 -
multiset:允许重复元素的有序集合。 -
map:键值对的有序映射,键唯一。 -
multimap:允许重复键的有序映射。
无序关联容器(Unordered Associative Containers)
-
unordered_set:基于哈希表的无序集合,元素唯一。 -
unordered_multiset:允许重复元素的无序集合。 -
unordered_map:基于哈希表的无序键值对映射。 -
unordered_multimap:允许重复键的无序映射。
容器适配器(Container Adaptors)
-
stack:后进先出(LIFO)的栈。 -
queue:先进先出(FIFO)的队列。 -
priority_queue:优先队列,元素按优先级排序。
2. 迭代器(Iterators)
迭代器是用于遍历容器中元素的对象,类似于指针。它提供了统一的访问容器元素的方式。迭代器分为以下几类:
-
输入迭代器(Input Iterator):只能读取元素,单向移动。
-
输出迭代器(Output Iterator):只能写入元素,单向移动。
-
前向迭代器(Forward Iterator):支持读写,单向移动。
-
双向迭代器(Bidirectional Iterator):支持双向移动(如
list的迭代器)。 -
随机访问迭代器(Random Access Iterator):支持随机访问(如
vector的迭代器)。
示例:
std::vector<int> vec = {1, 2, 3, 4, 5};
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " "; // 输出:1 2 3 4 5
}
3. 算法(Algorithms)
STL 提供了大量通用算法,用于对容器中的元素进行操作。这些算法通过迭代器与容器解耦,适用于多种容器。
常用算法:
-
排序算法:
-
sort:对范围内的元素进行排序。
std::vector<int> vec = {5, 3, 1, 4, 2}; std::sort(vec.begin(), vec.end()); // 排序后:1 2 3 4 5 -
-
查找算法:
-
find:在范围内查找指定值。
auto it = std::find(vec.begin(), vec.end(), 3); if (it != vec.end()) { std::cout << "Found: " << *it << std::endl; } -
-
复制算法:
-
copy:将范围内的元素复制到目标位置。
std::vector<int> dest(5); std::copy(vec.begin(), vec.end(), dest.begin());
-
-
其他常用算法:
-
reverse:反转范围内的元素。 -
accumulate:计算范围内元素的累加和。 -
count:统计范围内某个值的出现次数。 -
max_element/min_element:查找范围内的最大值或最小值。
-
示例:
#include <algorithm>
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {5, 3, 1, 4, 2};
std::sort(vec.begin(), vec.end()); // 排序
for (int x : vec) {
std::cout << x << " "; // 输出:1 2 3 4 5
}
return 0;
}
4. STL 的优势
-
泛型编程:STL 基于模板实现,可以处理任意类型的数据。
-
高效性:STL 的容器和算法经过高度优化,性能优异。
-
可扩展性:用户可以通过自定义迭代器和算法扩展 STL 的功能。
5. 示例代码
以下是一个综合示例,展示如何使用容器、迭代器和算法:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
// 创建一个 vector 并初始化
std::vector<int> vec = {5, 3, 1, 4, 2};
// 使用 sort 算法排序
std::sort(vec.begin(), vec.end());
// 使用迭代器遍历并输出
std::cout << "Sorted vector: ";
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
// 使用 find 算法查找元素
auto it = std::find(vec.begin(), vec.end(), 3);
if (it != vec.end()) {
std::cout << "Element 3 found at position: " << (it - vec.begin()) << std::endl;
}
return 0;
}
1692

被折叠的 条评论
为什么被折叠?



