Loading docs/lang/new.md +0 −82 Original line number Diff line number Diff line Loading @@ -261,88 +261,6 @@ std::swap(tupA, tupB); std::cout << std::get<1>(tupA) << std::endl; ``` ## std::array `std::array` 定义于头文件 `<array>` ,是封装固定大小数组的容器,其语义等同于保有一个 C 风格数组作为其唯一非静态数据成员的结构体。来看一个例子 ```cpp #include <algorithm> #include <array> #include <iostream> int main() { std::array<int, 5> a = {1, 9, 2, 6, 0}; std::array<int, 5> b = a; std::sort(a.begin(), a.end()); for (auto i : a) std::cout << i << " "; std::cout << std::endl << a[0] << " " << a.front() << std::endl; std::cout << (a != b) << std::endl; } ``` ### 成员函数 #### 隐式定义的成员函数 | 函数 | 作用 | | ------------- | ----------------------------------- | | `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` 算法 | 例子 ```cpp #include <array> #include <iostream> int main() { std::array<int, 5> a; a[0] = 1; std::cout << a.size() << " " << a.max_size() << std::endl; a.fill(0x7f7f7f7f); std::cout << a.front() << " " << a.at(4) << std::endl; return 0; } ``` ## std::function 类模板 `std::function` 是通用多态函数封装器,定义于头文件 `<functional>` 。 `std::function` 的实例能存储、复制及调用任何可调用(_Callable_)目标——函数、Lambda 表达式或其他函数对象,还有指向成员函数指针和指向数据成员指针。 Loading Loading
docs/lang/new.md +0 −82 Original line number Diff line number Diff line Loading @@ -261,88 +261,6 @@ std::swap(tupA, tupB); std::cout << std::get<1>(tupA) << std::endl; ``` ## std::array `std::array` 定义于头文件 `<array>` ,是封装固定大小数组的容器,其语义等同于保有一个 C 风格数组作为其唯一非静态数据成员的结构体。来看一个例子 ```cpp #include <algorithm> #include <array> #include <iostream> int main() { std::array<int, 5> a = {1, 9, 2, 6, 0}; std::array<int, 5> b = a; std::sort(a.begin(), a.end()); for (auto i : a) std::cout << i << " "; std::cout << std::endl << a[0] << " " << a.front() << std::endl; std::cout << (a != b) << std::endl; } ``` ### 成员函数 #### 隐式定义的成员函数 | 函数 | 作用 | | ------------- | ----------------------------------- | | `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` 算法 | 例子 ```cpp #include <array> #include <iostream> int main() { std::array<int, 5> a; a[0] = 1; std::cout << a.size() << " " << a.max_size() << std::endl; a.fill(0x7f7f7f7f); std::cout << a.front() << " " << a.at(4) << std::endl; return 0; } ``` ## std::function 类模板 `std::function` 是通用多态函数封装器,定义于头文件 `<functional>` 。 `std::function` 的实例能存储、复制及调用任何可调用(_Callable_)目标——函数、Lambda 表达式或其他函数对象,还有指向成员函数指针和指向数据成员指针。 Loading