type
Post
status
Published
date
Jun 19, 2025
slug
STL4C++
summary
收录C++标准模版库的基本内容
tags
推荐
技术
category
技术分享
icon
password
comment
Show
2024.11.27
给C++这个部分收尾一下,拖了太久了~主要介绍STL中容器和一些算法
一、array 详解基本特点头文件成员函数详解1. 迭代器相关函数2. 元素访问函数3. 容量相关函数4. 修改器函数5. 非成员函数特性和注意事项使用场景二、std::vector 详解基本特点头文件成员函数详解1. 迭代器相关函数2. 元素访问函数3. 容量相关函数
一、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的元素,编译期检查。
- 比较运算符:
==,!=,<,>,<=,>=。
示例:
特性和注意事项
- 大小固定:
std::array的大小必须在编译时确定,因此适合静态分配的场景。
- 与传统数组的区别:
- 提供 STL 接口,方便与其他容器交互。
- 支持范围检查和标准库功能。
- 与动态容器的区别:
- 不支持动态扩展(如
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():返回当前元素个数。
- 作者:Samuel Hu
- 链接:http://hjw-aihub.cn/article/STL4C%2B%2B
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。









