当前位置: 首页 > ds >正文

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 9return 0;
}

关联知识点

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

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

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


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

http://www.xdnf.cn/news/4908.html

相关文章:

  • 73页最佳实践PPT《DeepSeek自学手册-从理论模型训练到实践模型应用》
  • 自研MCU芯片闪存驱动的实现:OpenOCD详细过程记录与操作指南
  • 2.1 点云数据存储格式——引言
  • 正则表达式实用指南:原理、场景、优化与引擎对比
  • 【LangChain基础系列】深入全面掌握文本加载器
  • PH热榜 | 2025-05-08
  • 安防多协议接入/视频汇聚平台EasyCVR助力工地/工程/建筑施工领域搭建视频远程监控系统
  • [git]如何关联本地分支和远程分支
  • 网络安全赛题解析
  • SEMI E40-0200 STANDARD FOR PROCESSING MANAGEMENT(加工管理标准)-(三)完结
  • 用于构建安全AI代理的开源防护系统
  • Java 基础知识点——数组相关
  • 使用Mathematica内置函数绘制Sierpinski地毯
  • rce-labs level 3,4,5
  • 3.2.3 掌握RDD转换算子 - 5. 合并算子 - union()
  • 飞云分仓操盘副图指标操作技术图文分解
  • 平板收银系统、国产系统,鸿蒙系统,小键盘的封装与应用—仙盟创梦IDE
  • 基于FPGA控制PCF8591开展ADC采样,以采样烟雾模块输出模拟电压为例(IIC通信)
  • OpenTelemetry 介绍
  • neo4j官方示例
  • 汽车为什么需要以太网?带宽?实时?
  • stable diffusion的attention-map:提取和可视化跨注意力图
  • CLR是什么
  • 【Linux网络】Socket-UDP相关函数
  • 一天学会Maven
  • QMK配置器详解:QMK Configurator
  • 开启智能Kubernetes管理新时代:kubectl-ai让操作更简单!
  • 101alpah_第5个alpha学习
  • C++GO语言微服务基础技术②
  • 【HarmonyOS 5】App Linking 应用间跳转详解