引子
DAY3概括地对容器进行补充学习,包括它的类型和操作。之后总结了这两天刷题时用到的新的知识。
1.顺序容器
1.1顺序容器类型
类型详情见最上方思维导图,在此不过多赘述。
- string和vector将元素保存在连续的内存空间中,能够使用下标进行快速的随机访问,但是在中间添加或删除元素非常耗时。
- list和forward_list与上述互补,即令任何位置的添加和删除操作变得快速,但是不支持元素的随机访问。且forward_list没有size操作。
- deque与vector类似,但是它在两端的添加或删除操作很快。
- array的大小是固定的,不支持添加和删除操作。
1.2容器操作
常见操作详见DAY1,下面进行一些补充
成员 | 含义 |
---|
c.back() | 返回c中尾元素的引用 | c.front() | 返回c中首元素的引用 | a.swap(b) 等价于 swap(a, b) | 交换a和b的元素 | c.emplace(inits) | 使用inits构造c中的一个元素 | c.erase(args) | 删除args指定的元素 | c.clear() | 删除c中的所有元素,返回void | c.pop_back() | 删除c中尾元素 | c.pop_front() | 删除c中首元素 | c.erase(p) | 删除迭代器p所指定的元素,返回一个指向被删元素之后元素的迭代器 | c.erase(b, e) | 删除迭代器b和e范围内的元素,返回一个指向最后一个被删元素之后元素的迭代器 |
插入操作 | 含义 |
---|
c.push_front(t) | 在c的头部创建一个值为t或由args创建的元素 | c.emplace_front(args) | | c.insert(args) | 将args中的元素拷贝进c | c.insert(p, t) | 在迭代器p指向的元素之前创建一个值为t或由args创建的元素,返回指向新添加元素的迭代器 | c.emplace(args) | | c.insert(p, n, t) | 在迭代器p指向的元素之前插入n个值为t的元素,返回指向新添加的第一个元素的迭代器,若范围为空,则返回p | c.insert(p, b, e) | 将迭代器b和e指定的范围内的元素插入到迭代器p指向的元素之前,b和e不能指向c中的元素,返回指向新添加的第一个元素的迭代器,若范围为空,则返回p | c.insert(p, il) | il是一个花括号包围的元素值列表,将这些定值插入到迭代器p指向的元素之前,返回指向新添加的第一个元素的迭代器,若范围为空,则返回p |
注:
- 所有容器都支持相等或不等运算符;
- vector和string不支持push_front和emplace_front
- forward_list不支持push_back和emplace_back
- array不支持这些操作
- 向一个vector、string和deque插入元素会使所有指向容器的迭代器、引用和指针失效。
迭代器:详见DAY2,其中,forward_list迭代器不支持递减运算符,并且DAY1中所列举的算术运算只能应用于string、vector、deque和array的迭代器。 迭代器范围:由一对迭代器表示,通常称为begin和end,迭代器范围中的元素包含begin所表示的元素以及begin和end之间所有的元素(end指向尾元素之后的位置),这种元素范围称为左闭合区间。 因此可以用如下的代码用循环来处理一个元素范围:
while(begin != end){
*begin = val;
++begin;
}
关于list和forward_list的操作,可以看这篇博客https://blog.csdn.net/u013006553/article/details/78158717
1.3容量
操作 | 含义 |
---|
c.resize(n) | 调整c的大小为n个元素 | c.resize(n, t) | 调整c的大小为n个元素, 任何新添加的元素都初始化为值t | c.capacity() | 不重新分配内存空间的话,c可以保存多少元素 | c.reserve(n) | 分配至少能容纳n个元素的内存空间 |
2.容器适配器
除了顺序容器,标准库还定义了三个顺序容器适配器:栈适配器stack、队列适配器queue和priority_queue。
栈适配器新操作 | 含义 |
---|
s.pop() | 删除栈顶元素 | s.push(item) | 压栈 | s.top() | 返回栈顶元素 |
队列适配器新操作 | 含义 |
---|
q.pop() | 返回queue的首元素或priority_queue的最高优先级的元素 | q.front() | 返回首元素或尾元素 | q.back() | 只适用于queue | q.top() | 返回最高优先级元素,只适用于priority_queue | q.push(item) | 在queue末尾或priority_queue中恰当的位置创建一个元素 |
3.关联容器
联容器中的元素是根据关键字储存的,支持普通容器操作,但是不支持顺序容器位置相关的操作。 具体内容将在DAY4中更新。
4.intersect()求交集
c=intersect(a,b) 找出向量a与b的相同元素,并按升序返回到c中。
|