type
Post
status
Published
date
Jun 19, 2025
slug
STL4C++
summary
收录C++标准模版库的基本内容
tags
推荐
技术
category
技术分享
icon
password
comment
Show
😀
2024.11.27 给C++这个部分收尾一下,拖了太久了~主要介绍STL中容器和一些算法
 

一、array 详解

std::array 是 C++ 标准模板库(STL)中的一个容器,提供了静态大小的数组封装。与传统的 C 风格数组相比,它在类型安全和功能性方面有更大的提升。

基本特点

  • 静态大小std::array 的大小在编译时确定,不能动态调整。
  • 高效性:内部实现是一个 C 风格的数组,性能几乎没有额外开销。
  • 接口丰富:提供了 STL 容器的统一接口,例如迭代器、容量操作、元素访问等。
  • 类型安全:支持类型检查和范围检查(通过 at() 方法)。

头文件

声明和初始化

成员函数详解

1. 迭代器相关函数

  • begin()cbegin():返回指向第一个元素的迭代器或常量迭代器。
  • end()cend():返回指向末尾后一个位置的迭代器或常量迭代器。
  • rbegin()crbegin():返回反向迭代器指向最后一个元素。
  • rend()crend():返回反向迭代器指向第一个元素之前的位置。
示例:

2. 元素访问函数

  • at(size_t pos):安全访问指定位置的元素,超出范围会抛出 std::out_of_range 异常。
  • operator[]:快速访问指定位置的元素,不检查范围。
  • front():返回第一个元素的引用。
  • back():返回最后一个元素的引用。
  • data():返回指向数组的指针,可以与 C 风格代码兼容。
示例:

3. 容量相关函数

  • size():返回数组的大小。
  • max_size():返回数组的最大大小,通常等于 size()
  • empty():检查容器是否为空。
示例:

4. 修改器函数

  • fill(const T& value):将数组的每个元素设置为指定值。
  • swap(std::array& other):交换两个数组的内容。
示例:

5. 非成员函数

  • std::get<N>(array):访问数组中索引为 N 的元素,编译期检查。
  • 比较运算符:==, !=, <, >, <=, >=
示例:

特性和注意事项

  1. 大小固定std::array 的大小必须在编译时确定,因此适合静态分配的场景。
  1. 与传统数组的区别
      • 提供 STL 接口,方便与其他容器交互。
      • 支持范围检查和标准库功能。
  1. 与动态容器的区别
      • 不支持动态扩展(如 std::vector)。
      • 性能更高,没有动态分配的开销。

使用场景

  • 数组大小在编译时已知且不会改变的场景。
  • 性能要求较高时,std::array 提供了类似 C 风格数组的效率,但安全性更高。
  • 需要与 STL 容器或算法结合使用时。

 

二、std::vector 详解

std::vector 是 C++ 标准模板库中最常用的动态数组容器,支持动态大小调整。与 std::array 不同,std::vector 的大小在运行时可以灵活扩展或收缩。

基本特点

  • 动态大小:支持自动扩展和收缩。
  • 连续内存:存储在一块连续内存中,可与 C 风格数组兼容。
  • 高效访问:提供常数时间复杂度的随机访问(通过下标操作符)。
  • 丰富功能:支持 STL 迭代器、算法、容量管理等功能。
  • 自动管理内存:容器会自动分配和释放内存,避免手动管理。

头文件

声明和初始化

成员函数详解

1. 迭代器相关函数

  • begin()cbegin():返回指向第一个元素的迭代器或常量迭代器。
  • end()cend():返回指向末尾后一个位置的迭代器或常量迭代器。
  • rbegin()crbegin():返回指向最后一个元素的反向迭代器。
  • rend()crend():返回指向第一个元素之前的反向迭代器。
示例:

2. 元素访问函数

  • at(size_t pos):安全访问指定位置的元素,超出范围抛出异常。
  • operator[]:快速访问指定位置的元素,不检查范围。
  • front():返回第一个元素的引用。
  • back():返回最后一个元素的引用。
  • data():返回指向底层数组的指针。
示例:

3. 容量相关函数

  • size():返回当前元素个数。
C++进阶Pytorch入门学习
Loading...
Samuel Hu
Samuel Hu
沪上985软工在读 喜欢写代码 爱折腾的混子
小红书
统计
文章数:
24
公告

你好呀!👋

🎓 同济大四 + 浙大研0
🔍 我的研究聚焦在 AISE(AI for Software Engineering) 领域✨
🤖 具体方向有两个特别让我着迷的:
  • Code Reasoning 🧠💻
  • Code Generation ✨📝
💡 我相信AI与软件工程的结合会改变未来的开发方式,很开心能在这个交叉领域学习成长~
👥 欢迎大家多多交流!💬