跳转至

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).

向量Vector

双端队列Deque

单向链表Forward-List

双向链表Lsit

映射容器

集合Set

多重集合Multiset

映射Map

多重映射Multimap

无序容器

无序集合Unordered Set

无序多重集合Unordered Multiset

无序映射Unordered Map

无序多重映射Unordered Multimap

容器适配器

栈Stack

队列Queue

优先队列priority_queue