C++的STL

C++ STL 快速入门指南

C++ STL(Standard Template Library,标准模板库)是 C++ 标准库的核心组成部分,提供了一套通用的容器迭代器算法函数对象,极大地提高了代码的复用性、效率和可读性。

STL 六大组件

  1. 容器 (Containers):存储数据集合的类模板。
  2. 迭代器 (Iterators):广义指针,用于遍历容器中的元素,连接容器与算法。
  3. 算法 (Algorithms):各种常用算法(排序、查找、复制等)的函数模板。
  4. 函数对象 (Function Objects):行为类似函数的对象(仿函数),用于算法的自定义操作。
  5. 适配器 (Adapters):对容器、迭代器或函数对象进行封装,改变其行为(如 stackqueue)。
  6. 分配器 (Allocators):负责内存管理,通常使用默认值。

最常用的容器

容器类型 容器名称 特点与适用场景
序列容器 vector 动态数组。支持随机访问,尾部插入/删除快,中间/头部慢。最常用
list 双向链表。不支持随机访问,任意位置插入/删除极快。
deque 双端队列。支持随机访问,头尾插入/删除快。
关联容器 set / multiset 有序集合,元素唯一/可重复。基于红黑树,查找/插入/删除 O(log n)。
map / multimap 有序键值对,键唯一/可重复。基于红黑树,用 key 快速查找 value。
无序关联容器 (C++11) unordered_set / unordered_map 哈希表实现。元素无序,查找/插入/删除平均 O(1),性能高。
容器适配器 stack 栈(LIFO),基于 dequelist 实现。
queue 队列(FIFO),基于 dequelist 实现。
priority_queue 优先队列(最大/最小值在队首),基于 vector + 堆算法。

常用算法(位于 <algorithm>

  • 排序sort(v.begin(), v.end())
  • 查找find(v.begin(), v.end(), target)
  • 遍历for_each(v.begin(), v.end(), [](int x){ cout << x; })
  • 变换transform(...)
  • 复制copy(...)
  • 反转reverse(...)

代码示例

#include <iostream>
#include <vector>
#include <algorithm>
#include <map>
#include <string>

int main() {
    // 1. vector 容器
    std::vector<int> numbers = {5, 2, 8, 1, 9};

    // 2. 排序
    std::sort(numbers.begin(), numbers.end());

    // 3. 查找
    int target = 8;
    auto it = std::find(numbers.begin(), numbers.end(), target);
    if (it != numbers.end()) {
        std::cout << "找到 " << target << " 在索引 " << (it - numbers.begin()) << std::endl;
    }

    // 4. 范围 for 遍历
    for (int n : numbers) {
        std::cout << n << " ";
    }
    // 输出: 1 2 5 8 9
    std::cout << std::endl;

    // 5. map 示例
    std::map<std::string, int> ages = {{"Alice", 25}, {"Bob", 30}};
    std::cout << "Alice's age: " << ages["Alice"] << std::endl;

    return 0;
}
posted @ 2026-05-24 22:28  十七code  阅读(6)  评论(0)    收藏  举报