Loading docs/lang/csl/sequence-container.md +47 −2 Original line number Diff line number Diff line Loading @@ -167,9 +167,54 @@ vector 提供了如下几种 [迭代器](./iterator.md) `array` 实际上是 STL 对数组的封装。它相比 `vector` 牺牲了动态扩容的特性,但是换来了与原生数组几乎一致的性能(在开满优化的前提下)。因此如果能使用 C++11 特性的情况下,能够使用原生数组的地方几乎都可以直接把定长数组都换成 `array` ,而动态分配的数组可以替换为 `vector` 。 ### `array` 的使用方法 ### 成员函数 `array` 的使用方法与 `vector` 高度相似,仅有声明方式与 `vector` 不同,以及没有元素增删的能力(如 `push_back` )。这里只给出一段例子,详细内容 [请参见 C++ 文档](https://zh.cppreference.com/w/cpp/container/array) 。 #### 隐式定义的成员函数 | 函数 | 作用 | | ------------- | ----------------------------------- | | `operator=` | 以来自另一 `array` 的每个元素重写 `array` 的对应元素 | #### 元素访问 | 函数 | 作用 | | -------------- | --------------------- | | `at` | 访问指定的元素,同时进行越界检查 | | `operator[]` | 访问指定的元素, **不** 进行越界检查 | | `front` | 访问第一个元素 | | `back` | 访问最后一个元素 | | `data` | 返回指向内存中数组第一个元素的指针 | `at` 若遇 `pos >= size()` 的情况会抛出 `std::out_of_range` 。 #### 容量 | 函数 | 作用 | | ------------ | ----------- | | `empty` | 检查容器是否为空 | | `size` | 返回容纳的元素数 | | `max_size` | 返回可容纳的最大元素数 | 由于每个 `array` 都是固定大小容器, `size()` 返回的值等于 `max_size()` 返回的值。 ### 操作 | 函数 | 作用 | | -------- | -------- | | `fill` | 以指定值填充容器 | | `swap` | 交换内容 | **注意,交换两个 `array` 是 $\Theta(\text{size})$ 的,而非与常规 STL 容器一样为 $O(1)$ 。** ### 非成员函数 | 函数 | 作用 | | --------------- | ------------------- | | `operator==` 等 | 按照字典序比较 `array` 中的值 | | `std::get` | 访问 `array` 的一个元素 | | `std::swap` | 特化的 `std::swap` 算法 | 下面是一个 `array` 的使用示例: ```cpp // 1. 创建空array,长度为3; 常数复杂度 Loading Loading
docs/lang/csl/sequence-container.md +47 −2 Original line number Diff line number Diff line Loading @@ -167,9 +167,54 @@ vector 提供了如下几种 [迭代器](./iterator.md) `array` 实际上是 STL 对数组的封装。它相比 `vector` 牺牲了动态扩容的特性,但是换来了与原生数组几乎一致的性能(在开满优化的前提下)。因此如果能使用 C++11 特性的情况下,能够使用原生数组的地方几乎都可以直接把定长数组都换成 `array` ,而动态分配的数组可以替换为 `vector` 。 ### `array` 的使用方法 ### 成员函数 `array` 的使用方法与 `vector` 高度相似,仅有声明方式与 `vector` 不同,以及没有元素增删的能力(如 `push_back` )。这里只给出一段例子,详细内容 [请参见 C++ 文档](https://zh.cppreference.com/w/cpp/container/array) 。 #### 隐式定义的成员函数 | 函数 | 作用 | | ------------- | ----------------------------------- | | `operator=` | 以来自另一 `array` 的每个元素重写 `array` 的对应元素 | #### 元素访问 | 函数 | 作用 | | -------------- | --------------------- | | `at` | 访问指定的元素,同时进行越界检查 | | `operator[]` | 访问指定的元素, **不** 进行越界检查 | | `front` | 访问第一个元素 | | `back` | 访问最后一个元素 | | `data` | 返回指向内存中数组第一个元素的指针 | `at` 若遇 `pos >= size()` 的情况会抛出 `std::out_of_range` 。 #### 容量 | 函数 | 作用 | | ------------ | ----------- | | `empty` | 检查容器是否为空 | | `size` | 返回容纳的元素数 | | `max_size` | 返回可容纳的最大元素数 | 由于每个 `array` 都是固定大小容器, `size()` 返回的值等于 `max_size()` 返回的值。 ### 操作 | 函数 | 作用 | | -------- | -------- | | `fill` | 以指定值填充容器 | | `swap` | 交换内容 | **注意,交换两个 `array` 是 $\Theta(\text{size})$ 的,而非与常规 STL 容器一样为 $O(1)$ 。** ### 非成员函数 | 函数 | 作用 | | --------------- | ------------------- | | `operator==` 等 | 按照字典序比较 `array` 中的值 | | `std::get` | 访问 `array` 的一个元素 | | `std::swap` | 特化的 `std::swap` 算法 | 下面是一个 `array` 的使用示例: ```cpp // 1. 创建空array,长度为3; 常数复杂度 Loading