STL简介

目录

主要组件

[1. 容器(Container)](#1. 容器(Container))

[2. 算法(Algorithm)](#2. 算法(Algorithm))

[3. 迭代器(Iterator)](#3. 迭代器(Iterator))

[4. 仿函数(Functor / Function Object)](#4. 仿函数(Functor / Function Object))

[5. 配接器(Adapter)](#5. 配接器(Adapter))

[6. 空间配置器(Allocator)](#6. 空间配置器(Allocator))

[示例:使用 STL 排序和查找](#示例:使用 STL 排序和查找)

优势

注意


这里简介一下,马上深入学习

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


主要组件

1. 容器(Container)

用于存储数据集合的类模板。

  • 序列容器 :string、vector、list、deque

  • 关联容器 :map、set、multimap、multiset

  • 无序关联容器 (C++11 起):unordered_map、unordered_set 等(图片中未列出,但属于扩展)

2. 算法(Algorithm)

对容器中的元素进行操作的通用函数模板。

  • 例如:find(查找)、swap(交换)、reverse(反转)、sort(排序)、merge(合并)

3. 迭代器(Iterator)

连接容器和算法的桥梁,行为类似指针,用于遍历容器中的元素。

  • 类型:iterator(普通迭代器)、const_iterator(只读迭代器)、reverse_iterator(反向迭代器)、const_reverse_iterator(只读反向迭代器)

4. 仿函数(Functor / Function Object)

重载了 operator() 的类对象,可以像函数一样调用。用于算法的自定义操作(如比较、算术)。

  • 例如:greater(大于)、less(小于)

5. 配接器(Adapter)

对容器、迭代器或仿函数进行封装,改变其接口或行为。

  • 容器适配器 :stack(栈)、queue(队列)、priority_queue(优先队列)

  • 其他适配器:迭代器适配器(如反向迭代器)、仿函数适配器(如 bind)

6. 空间配置器(Allocator)

负责容器的内存分配与释放,以及对象的构造与析构。通常使用默认的 allocator,也允许用户自定义。


示例:使用 STL 排序和查找

cpp 复制代码
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec = {4, 2, 5, 1, 3};

    // 排序(算法)
    std::sort(vec.begin(), vec.end());

    // 查找(算法)
    auto it = std::find(vec.begin(), vec.end(), 3);

    if (it != vec.end())
        std::cout << "Found: " << *it << '\n';

    // 使用 lambda 作为函数对象
    std::for_each(vec.begin(), vec.end(), [](int n) {
        std::cout << n << ' ';
    });
    return 0;
}

优势

  • 代码复用:无需为每种数据结构重写算法。

  • 性能:STL 经过高度优化,通常优于手写循环。

  • 类型安全:模板在编译期检查类型错误。

  • 可扩展:可基于迭代器接口为新容器添加标准算法支持。


注意

  • STL 是 C++ 标准库的一部分,早期(1994年)由 Alexander Stepanov 等人设计并提交给 C++ 标准委员会。如今在 C++ 标准中,"STL" 通常泛指整个 C++ 标准库中的容器、算法和迭代器部分。

  • 需包含相应头文件(如 <vector>、<algorithm>),并使用 std 命名空间。

相关推荐
choumin6 小时前
C++中万能引用与std::forward的作用和用法
c++·万能引用·std forward
下一站春风里7 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
努力努力再努力wz9 小时前
【C++高阶系列】C++20 协程底层原理:函数为什么能暂停?从状态机到 Task,彻底串起挂起、恢复与协程调度
开发语言·c++·c++20·1024程序员节
划破黑暗的第一缕曙光10 小时前
[C++]:4.模板
c++·template·模板·函数模版·类模版
十五年专注C++开发10 小时前
pybind11:一个跨C++和Python平台的编程库
开发语言·c++·python·pybind11
CodeYp201910 小时前
第11讲:stack 和 queue
开发语言·c++·queue·stack
沫璃染墨10 小时前
《Qt从零入门系列(十五):Qt线程安全与锁机制详解——从QMutex到RAII与读写锁实战》
开发语言·c++·qt·安全·交互·线程·qt6.3
hetao173383710 小时前
2026-10-25 hetao1733837 的刷题记录
c++·算法
fqbqrr11 小时前
2610C++,UI复合技术在窗口中绘画字体图标
c++·ui
见叶之秋11 小时前
【C++】红与黑的边界:红黑树从插入到自检
数据结构·c++·算法·面试