💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## [$]一.容器的常用操作 ### 1.成员类型 | 类型 | 含义 | | ------------------------------ | -------------------------------------------- | | `C<T>::iterator` | 迭代器类型。 | | `C<T>::const_iterator` | 常迭代器类型。不可修改容器内元素。 | | `C<T>::reverse_iterator` | 反向迭代器。 | | `C<T>::const_reverse_iterator` | 常反向迭代器。不可修改容器内元素。 | | `C<T>::size_type` | 无符号整数类型的别名。 | | `C<T>::different_type` | 无符号整数类型的别名,两个迭代器之间的距离。 | | `C<T>::value_type` | `T` 的别名,元素类型。 | | `C<T>::reference` | `T&` 的别名,元素的引用。 | | `C<T>::const_reference` | `const T&` 的别名,元素的常引用。 | ### 2.构造 + 只有同类型的容器可以拷贝初始化。 + 只有除 `array` 以外顺序容器才可以在构造函数中指定容器大小。 针对非 `array`的构造操作: | 函数 | 不适用容器 | 含义 | | ---------------------------------------- | ----------------- | ----------------------------------------------------------- | | `C<T> c;` | `array` | 构造一个空容器。 | | `C<T> c(const C<T> &c2);` | `array` | 将 `c2` 拷贝到 `c`。 | | `C<T> c = c2;` | `array` | 将 `c2` 拷贝到 `c`。 | | `C<T> c(size_type size);` | `array`和关联容器 | 定义初始大小为 `size` 的容器。 | | `C<T> c(size_type size,const T &value);` | `array`和关联容器 | 定义初始大小为 `size` 的容器,并使用 `value` 填充所有元素。 | | `C<T> c(b,e);` | `array` | 将迭代器 `b` 和 `e` 指定范围内的元素拷贝到 `c`。 | | [11+]`C<T> c{a,b,c,...}` | `array` | 列表初始化 `c`。 | | [11+]`C<T> c = {a,b,c,...}` | `array` | 列表初始化 `c`。 | 针对 `array`的构造操作,模板实参中需要添加额外的参数指明数组大小: | 函数 | 适用容器 | 含义 | | ----------------------------------- | -------- | ------------------------------------------------ | | `C<T,Size> c;` | `array` | 构造一个空容器。 | | `C<T,Size> c(const C<T,Size> &c2);` | `array` | 将 `c2` 拷贝到 `c`。 | | `C<T,Size> c = c2;` | `array` | 将 `c2` 拷贝到 `c`。 | | `C<T,Size> c(b,e);` | `array` | 将迭代器 `b` 和 `e` 指定范围内的元素拷贝到 `c`。 | | [11+]`C<T,Size> c{a,b,c,...}` | `array` | 列表初始化 `c`。 | | [11+]`C<T,Size> c = {a,b,c,...}` | `array` | 列表初始化 `c`。 | ### 3.赋值操作 + 只有同类型的容器可以赋值和交换。 + 赋值操作可能导致赋值号左边容器的迭代器失效。 + 除了 `array`和 `string`,交换操作对迭代器没有影响。 + 除了 `array`和 `string`,交换操作不会进行任何的拷贝、删除、插入操作。 | 函数 | 不适用容器 | 含义 | | ------------------------ | ----------------- | ------------------------------------------------------------ | | `c1=c2;` | 无 | 容器赋值。 | | `c1={a,b,c,...};` | `array` | 用列表中的元素替换 `c1` 中的元素。 | | `void c1.swap(c2);` | 无 | `c1` 与 `c2` 交换。 | | [11+]`void swap(c1,c2);` | 无 | `c1` 与 `c2` 交换。 | | `c.assign(b,e);` | 关联容器 | 将 `c` 中的元素替换为迭代器 `b` 和 `e` 所表示的范围中的元素。迭代器 `b` 和 `e` 不能指向 `c` 中的元素,因为旧元素会被替换。 | | `c.assign({a,b,c,...});` | `array`和关联容器 | 用初始化列表中的元素替换 `c` 中的元素。 | | `c.assign(n,t);` | 关联容器 | 将 `c` 中的元素替换为 `n` 个 `t` 表示的元素。 | ### 4.大小 | 函数 | 不适用容器 | 含义 | | ------------------------- | -------------- | ------------------------------------------------------------ | | `size_type c.size();` | `forward_list` | 容器的元素数。 | | `size_type c.max_size();` | 无 | 容器的最大的元素数。(它的大小与 **系统和库实现** 有关,与自身的长度无关) | | `bool c.empty();` | 无 | 容器是否为空。 | ### 5.增删 由于不同的容器操作接口不同,这里只列函数名,未列出参数和返回值。 | 函数 | 不适用容器 | 含义 | | -------------- | ---------- | ---------------- | | `c.insert();` | `array` | 容器插值。 | | `c.emplace();` | `array` | 原位插值。 | | `c.erase();` | `array` | 删除指定的元素。 | | `c.clear();` | `array` | 清空元素。 | ### 6.比较 可以使用关系运算符对容器进行比较。 1. **条件** + 同种类型的容器 + 由于容器的比较需要对元素使用关系运算符,因此需要保证可以使用关系运算符对元素进行比较。 2. **策略** + 如果两个容器具有相同大小且所有元素都两两对应相等,则这两个容器相等;否则两个容器不等。 + 如果两个容器大小不同,但较小容器中每个元素都等于较大容器中的对应元素,则较小容器小于较大容器。 + 如果两个容器都不是另一个容器的前缀子序列,则它们的比较结果取决于第一个不相等的元素的比较结果。 ### 7.获取迭代器 | 函数 | 不适用容器 | 含义 | | --------------------------------------- | ---------- | ---------------------------------------------------- | | `C<T>::iterator c.begin();` | 无 | 返回第一个元素的迭代器。 | | `C<T>::iterator c.end();` | 无 | 返回最后一个元素的下一个元素的迭代器。 | | `C<T>::const_iterator c.begin() const;` | 无 | 容器是常量,返回第一个元素的常迭代器。 | | `C<T>::const_iterator c.end() const;` | 无 | 容器是常量,返回最后一个元素的下一个元素的常迭代器。 | | [11+]`C<T>::const_iterator c.cbegin();` | 无 | 返回第一个元素的常迭代器。 | | [11+]`C<T>::const_iterator c.cend();` | 无 | 返回最后一个元素的下一个元素的常迭代器。 | ### 8.获取反向迭代器 | 函数 | 不适用容器 | 含义 | | ------------------------------------------------ | -------------- | ------------------------------------------------------ | | `C<T>::reverse_iterator c.rbegin();` | `forward_list` | 返回第一个元素的前一个元素的反向迭代器。 | | `C<T>::reverse_iterator c.rend();` | `forward_list` | 返回最后一个元素的反向迭代器。 | | `C<T>::const_reverse_iterator c.rbegin() const;` | `forward_list` | 容器是常量,返回第一个元素的前一个元素的常反向迭代器。 | | `C<T>::const_reverse_iterator c.rend() const;` | `forward_list` | 容器是常量,返回最后一个元素的常反向迭代器。 | | [11+]`C<T>::const_reverse_iterator c.crbegin();` | `forward_list` | 返回第一个元素的前一个元素的常反向迭代器。 | | [11+]`C<T>::const_reverse_iterator c.crend();` | `forward_list` | 返回最后一个元素的常反向迭代器。 |