Skip to content

Commit

Permalink
添加"容器适配器"
Browse files Browse the repository at this point in the history
  • Loading branch information
arkingc committed Jun 4, 2019
1 parent 7f711ee commit 9d11f25
Showing 1 changed file with 127 additions and 1 deletion.
128 changes: 127 additions & 1 deletion C++/C++Primer.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

|**常见类型**|**函数**|**面向对象**|**容器**|**模板与泛型编程**|**内存管理**|
|:--:|:--:|:--:|:--:|:--:|:--:|
|[变量](#ch1)<br>[字符串与数组](#ch4)|[函数](#ch5)|[](#ch6)<br>[重载运算与类型转换](#ch7)<br>[继承体系](#ch8)|[容器](#ch9)|[模板与泛型编程](#ch2)<br>|[内存管理](#ch3)<br>|
|[变量](#ch1)<br>[字符串与数组](#ch4)|[函数](#ch5)|[](#ch6)<br>[重载运算与类型转换](#ch7)<br>[继承体系](#ch8)|[容器](#ch9)<br>[容器适配器](#ch10)|[模板与泛型编程](#ch2)<br>|[内存管理](#ch3)<br>|

<br>
<br>
Expand Down Expand Up @@ -140,6 +140,15 @@
+ [3.3 pair](#33-pair)
+ [3.4 操作](#34-操作)

<h2 id="ch10"></h2>

* [容器适配器](#容器适配器)
- [1.通用的容器适配器操作](#1通用的容器适配器操作)
- [2.三个顺序容器适配器](#2三个顺序容器适配器)
+ [2.1 stack](#21-stack)
+ [2.2 queue](#22-queue)
+ [2.3 priority_queue](#23-priorityqueue)

<h2 id="ch2"></h2>

* [模板与泛型编程](#模板与泛型编程)
Expand Down Expand Up @@ -2323,6 +2332,123 @@ makepair(v1,v2)
<br>
<br>
# 容器适配器
**适配器**:一种机制,可以使某种事物的行为看起来像另外一种事物一样。如stack适配器接受一个顺序容器(除array或forward_list外),并使其操作起来像一个stack一样
容器,迭代器,函数都有适配器
## 1.通用的容器适配器操作
* 类型别名
- size_type
- value_type:元素类型
- container_type:实现适配器的底层容器类型
* 构造函数
- `A a;`:构建一个空适配器,根据适配器类型选择其默认底层容器类型来实现
- `A a(c)`:接受一个容器c来构造适配器a
* 关系运算符:每个适配器都支持所有关系运算符,运算符返回底层容器的比较结果
- `==`、`!=`、`<`、`<=`、`>`、`>=`
* 大小
- `a.empty()`
- `a.size()`
* 交换:`a`、`b`必须具有相同类型
- `swap(a,b)`
- `a.swap(b)`
<br>
## 2.三个顺序容器适配器
* 都能用deque作为底层容器
* 都要求具有添加删除元素的能力,所以底层容器都不能是array。此外,也不能是string
* 每个适配器都基于底层容器类型的操作定义了自己的特殊操作,只可以使用适配器操作而不能使用底层容器的操作
### 2.1 stack
> 默认底层容器:deque
需要的操作:
* `push_back()`
* `pop_back()`
* `back()`
可用的底层容器:
* 元素的添加删除需求决定了不能用array
* back操作使得不能使用forward_list
* 可以用:vector、list、deque
stack操作:
* 添加元素
- `s.push(item)`
- `s.emplace(args)`
* 删除元素
- `s.pop()`:弹出(删除),但不会返回
* 返回元素
- `s.top()`:返回栈顶元素,但不弹出(删除)
### 2.2 queue
> 默认底层容器:deque
需要的操作:
* `push_back()`
* `push_front()`
* `front()`
* `back()`
可用底层容器:
* 元素的添加删除需求决定了不能用array
* back操作使得不能使用forward_list
* 首部添加元素使得不能使用vector
* 可以用:list,deque
queue操作:
* 添加元素
- `q.push(item)`
- `q.emplace(args)`
* 返回元素:都不会删除元素
- `q.pop()`:返回首元素
- `q.front()`:返回首元素
- `q.back()`:返回尾元素
### 2.3 priority_queue
> 默认底层容器:vector
需要的操作:
* `push_back()`
* `pop_back()`
* `front()`
* 随机访问能力
可用底层容器:
* 元素的添加删除需求决定了不能用array
* 删除末尾元素使得不能用forward_list
* 随机访问又不能使用list与forward_list
* 可用用:vector,deque
priority_queue操作:
* 添加元素
- `q.push(item)`
- `q.emplace(args)`
* 返回元素:都不会删除元素
- `q.pop()`:返回最高优先级元素
- `q.top()`:返回最高优先级元素
- `q.front()`:返回首元素
<br>
<br>
# 模板与泛型编程
## 1.模板函数
Expand Down

0 comments on commit 9d11f25

Please sign in to comment.