C++ STL详解:vector、set与map及常见算法

需积分: 9 11 下载量 23 浏览量 更新于2024-09-16 收藏 43KB DOC 举报
"C++的标准模板库(Standard Template Library, STL)是C++编程语言中一组强大的工具,提供了高效且灵活的数据结构和算法。它主要包括四个核心组件:容器、迭代器、算法和函数对象。 一、容器 容器是STL的核心组成部分,它们可以存储和管理一组对象。常见的容器包括: 1. vector:动态数组,支持快速随机访问和在末尾高效地添加或删除元素。`vector`的声明和操作如下: - 声明:`vector<int> a;` 或 `vector<MyType> a;` - 初始化:`vector<int> a(100, 0);` 创建包含100个0的整数向量 - 操作:`size()` 返回向量大小,`pop_back()` 删除末尾元素,`push_back()` 添加元素到末尾,`back()` 返回末尾元素,`clear()` 清空向量 - 访问:通过索引(`a[5]`)或安全访问(`a.at(5)`)进行元素访问 2. set:关联容器,实现了一个排序的唯一元素集合。插入和查找效率通常为O(log n)。 3. map:关联容器,实现了一个排序的键值对集合。插入和查找效率同样为O(log n)。 二、算法 STL提供了一系列通用算法,可以作用于任何容器,如: 1. `sort`:对容器内的元素进行排序。例如,`sort(a.begin(), a.end());` 对向量a进行排序。 三、迭代器 迭代器是访问容器内元素的指针,提供了类似指针的功能,但更安全,支持各种操作,如前向、双向和随机访问。 四、函数对象 也称为仿函数,它们是行为类似函数的对象,可以作为算法的参数,以定制算法的行为。 例如,`manList` 是一个存储 `man` 类对象的 `vector`,可以通过以下方式遍历和操作: ```cpp for (vector<man>::iterator it = manList.begin(); it != manList.end(); ++it) { cout << "ID: " << it->id << ", Name: " << it->name << endl; } ``` 或使用范围基础for循环简化遍历: ```cpp for (const auto& man : manList) { cout << "ID: " << man.id << ", Name: " << man.name << endl; } ``` 此外,STL还提供了其他容器,如deque(双端队列)、list(双向链表)和stack(栈),以及更多的算法,如find、unique、copy等,它们极大地丰富了C++程序员处理数据的能力。STL的设计理念是可重用性和代码复用,通过模板机制,使得这些组件能适应多种数据类型,降低了代码的复杂性和冗余。