Loading docs/lang/csl/container.md +8 −14 Original line number Diff line number Diff line Loading @@ -5,41 +5,31 @@ ### 序列式容器 - **数组** ( `array` ) **C++11** ,定长的顺序表,C 风格数组的简单包装。 - **向量** ( `vector` ) 后端可高效增加元素的顺序表。 - **双端队列** ( `deque` ) 双端都可高效增加元素的顺序表。 - **列表** ( `list` ) 可以沿双向遍历的链表。 - **单向列表** ( `forward_list` ) 只能沿一个方向遍历的链表。 ### 关联式容器 - **集合** ( `set` ) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序。 - **多重集合** ( `multiset` ) 允许存在两个次序相等的元素的集合。 - **映射** ( `map` ) 由 {键,值} 对组成的集合,以某种作用于键对上的谓词排列。 - **多重映射** ( `multimap` ) 允许键对有相等的次序的映射。 ### 无序(关联式)容器 - **无序(多重)集合** ( `unordered_set` / `unordered_multiset` ) 与 `set` / `multiset` 的区别在与元素无序,只关心”元素是否存在“,使用哈希实现。 - **无序(多重)映射** ( `unordered_map` / `unordered_multimap` ) 与 `map` / `multimap` 的区别在与键 (key) 无序,只关心 "键与值的对应关系",使用哈希实现。 ### 容器适配器 容器适配器其实并不是容器。它们不具有容器的某些特点(如:有迭代器、有 `max_size()` 函数……)。 容器适配器其实并不是容器。它们不具有容器的某些特点(如:有迭代器、有 `clear()` 函数……)。 > ”适配器是使一种事物的行为类似于另外一种事物行为的一种机制”,适配器对容器进行包装,使其表现出另外一种行为。 - **栈** `(stack` ) 后进先出 (LIFO) 的容器。 - **队列** ( `queue` ) 先进先出 (FIFO) 的容器。 - **优先队列** ( `priority_queue` ) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列。 ## 共同点 Loading @@ -60,9 +50,11 @@ STL 容器中的元素都可以用迭代器指向。 ### 共有函数 `begin()/rbegin()` :返回指向开头/末尾元素的正向/反向迭代器。 `=` :有赋值运算符以及复制构造函数。 `begin()` :返回指向开头元素的迭代器。 `end()/rend()` :返回指向末尾/开头的下一个元素的正向/反向迭代器。 `end()` 不指向某个元素,但它是末尾元素的后继。 `end()` :返回指向末尾的下一个元素的迭代器。 `end()` 不指向某个元素,但它是末尾元素的后继。 `size()` :返回容器内的元素个数。 Loading @@ -72,4 +64,6 @@ STL 容器中的元素都可以用迭代器指向。 `swap()` :交换两个容器。 `==` / `!=` / `<` / `>` / `<=` / `>=` :按 **字典序** 比较两个容器的大小。 `clear()` :清空容器。 `==` / `!=` / `<` / `>` / `<=` / `>=` :按 **字典序** 比较两个容器的大小。(比较元素大小时 `map` 的每个元素相当于 `set<pair<key, value> >` ,无序容器不支持 `<` / `>` / `<=` / `>=` 。) Loading
docs/lang/csl/container.md +8 −14 Original line number Diff line number Diff line Loading @@ -5,41 +5,31 @@ ### 序列式容器 - **数组** ( `array` ) **C++11** ,定长的顺序表,C 风格数组的简单包装。 - **向量** ( `vector` ) 后端可高效增加元素的顺序表。 - **双端队列** ( `deque` ) 双端都可高效增加元素的顺序表。 - **列表** ( `list` ) 可以沿双向遍历的链表。 - **单向列表** ( `forward_list` ) 只能沿一个方向遍历的链表。 ### 关联式容器 - **集合** ( `set` ) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序。 - **多重集合** ( `multiset` ) 允许存在两个次序相等的元素的集合。 - **映射** ( `map` ) 由 {键,值} 对组成的集合,以某种作用于键对上的谓词排列。 - **多重映射** ( `multimap` ) 允许键对有相等的次序的映射。 ### 无序(关联式)容器 - **无序(多重)集合** ( `unordered_set` / `unordered_multiset` ) 与 `set` / `multiset` 的区别在与元素无序,只关心”元素是否存在“,使用哈希实现。 - **无序(多重)映射** ( `unordered_map` / `unordered_multimap` ) 与 `map` / `multimap` 的区别在与键 (key) 无序,只关心 "键与值的对应关系",使用哈希实现。 ### 容器适配器 容器适配器其实并不是容器。它们不具有容器的某些特点(如:有迭代器、有 `max_size()` 函数……)。 容器适配器其实并不是容器。它们不具有容器的某些特点(如:有迭代器、有 `clear()` 函数……)。 > ”适配器是使一种事物的行为类似于另外一种事物行为的一种机制”,适配器对容器进行包装,使其表现出另外一种行为。 - **栈** `(stack` ) 后进先出 (LIFO) 的容器。 - **队列** ( `queue` ) 先进先出 (FIFO) 的容器。 - **优先队列** ( `priority_queue` ) 元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列。 ## 共同点 Loading @@ -60,9 +50,11 @@ STL 容器中的元素都可以用迭代器指向。 ### 共有函数 `begin()/rbegin()` :返回指向开头/末尾元素的正向/反向迭代器。 `=` :有赋值运算符以及复制构造函数。 `begin()` :返回指向开头元素的迭代器。 `end()/rend()` :返回指向末尾/开头的下一个元素的正向/反向迭代器。 `end()` 不指向某个元素,但它是末尾元素的后继。 `end()` :返回指向末尾的下一个元素的迭代器。 `end()` 不指向某个元素,但它是末尾元素的后继。 `size()` :返回容器内的元素个数。 Loading @@ -72,4 +64,6 @@ STL 容器中的元素都可以用迭代器指向。 `swap()` :交换两个容器。 `==` / `!=` / `<` / `>` / `<=` / `>=` :按 **字典序** 比较两个容器的大小。 `clear()` :清空容器。 `==` / `!=` / `<` / `>` / `<=` / `>=` :按 **字典序** 比较两个容器的大小。(比较元素大小时 `map` 的每个元素相当于 `set<pair<key, value> >` ,无序容器不支持 `<` / `>` / `<=` / `>=` 。)