cpp自学 day24(STL初步认识)

STL 初识笔记


1.1 STL 的诞生

  • 背景:C++ 早期缺乏标准化的数据结构和算法库,开发者需要重复实现基础功能。

  • 目标:通过模板技术实现泛型编程,提高代码复用性和开发效率。

  • 贡献者:由 Alexander Stepanov 提出并推动成为 C++ 标准的一部分(1994 年正式纳入)。


1.2 STL 基本概念

  • 核心思想

    1. 容器:存储数据的模板类(如 vectorlistmap)。

    2. 算法:操作数据的模板函数(如 sortfindcopy)。

    3. 迭代器:连接容器和算法的“泛型指针”。

  • 特点:三者通过模板解耦,实现高度可复用性。


1.3 STL 六大组件

  1. 容器(Containers):管理数据的集合(顺序容器、关联容器)。

  2. 算法(Algorithms):对数据进行操作(排序、查找等)。

  3. 迭代器(Iterators):提供访问容器元素的统一接口。

  4. 仿函数(Functors):行为类似函数的对象(如 greater<int>())。

  5. 适配器(Adapters):修饰组件(如 stackqueue 基于 deque 实现)。

  6. 分配器(Allocators):管理内存分配(通常无需手动操作)。


1.4 容器、算法、迭代器

容器

  • 分类

    • 顺序容器:vectorlistdeque

    • 关联容器:setmapunordered_set

  • 特点:通过模板参数指定元素类型(如 vector<int>)。

算法

  • 分类

    • 非修改型:findcount

    • 修改型:sortreverse

  • 特点:通过迭代器操作容器,不直接依赖具体容器类型。

迭代器

  • 作用:类似指针,用于遍历容器元素。

  • 分类

    • 输入迭代器、输出迭代器

    • 前向迭代器、双向迭代器、随机访问迭代器


1.5 容器算法迭代器初识(示例)

#include <vector>
#include <algorithm>
#include <iostream>

int main() {
    // 容器:存储数据
    std::vector<int> vec = {3, 1, 4, 1, 5, 9};

    // 算法:排序(需随机访问迭代器)
    std::sort(vec.begin(), vec.end());

    // 迭代器:遍历输出
    for (auto it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }
    // 输出:1 1 3 4 5 9
    return 0;
}

关联知识点

  • 模板:STL 的基石,通过模板实现泛型编程。

  • 迭代器失效:操作容器时需注意迭代器可能失效的问题(如 vector 插入/删除元素)。

  • 性能考量:不同容器和算法的复杂度不同(如 vector 随机访问快,list 插入快)。


✍️ 学习建议:结合代码实践理解各组件的协作,尝试用不同容器和算法实现常见功能(如排序、查找)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值