STL容器
简介
STL容器可以类比于现成的完备的内置数据结构模型,这是C++与C相比一个很大的不同点,也是为什么C语言写算法不太方便的一大原因,C语言的很多数据结构需要自己造轮子,而C++就可以直接通过内置库使用
分类
线性容器
数组Array
template < class T, size_t N > class array;
在C++中,std::array
是一个固定大小的容器,它封装了一个静态数组,并提供了STL容器接口,与传统C语言的数组相比,它的访问更为安全规范,操作方法也更简便丰富。
声明引用
#include <array>
创建
std::array<int, 6> arr = {1, 2, 3, 4, 5, 6};
std::array<type, size> array_name [= {initialize data splited with ','}];
访问
arr[5];
// 访问数组arr第5个元素
arr.at(5);
// 访问第一个元素
arr.front();
// 访问最后一个元素
arr.back();
arr.data(); // returns a pointer to the first element in the array object.
有越界检查,越界抛出
std::out_of_range
异常
获取数组大小
arr.size();
arr.max_size(); // = .size();
arr.empty(); // test whether array is empty
迭代器
arr.begin(); // 指向数组第一个元素
arr.end(); // 指向数组最后一个元素的后一个位置
arr.rbegin(); // 指向数组最后一个元素
arr.rend(); // 指向数组第一个元素的前一个位置
// 下面都带有const性质
arr.cbegin(); // return const_iterator to beginning
arr.cend();
arr.crbegin();
arr.crend();
数组遍历
// 使用迭代器
for (auto it = arr.begin(); it != arr.end(); it++) {
std::cout << *it << " ";
}
// 使用范围for循环
for (const auto& value : arr) {
atd::cout << value << " ";
}
修改
arr[5] = 4;
arr.at(5) = 4;
arr.fill(0); // 向整个数组arr填充0
arr.swap(arr2) // exchange the content of array arr by the content of arr2, which is another array object of the same type(including the same size).