www.cplusplus.com/reference/stl/vector/max_size/有清晰的描述。
*c.size(); <= c.capacity(); <= c.max_size();
5 顺序容器的选用
a)顺序容器的特点:
vector容器可以实现高效的随机访问,但是除了容器尾部外,在其他任何位置添加和删除元素却很低效;
list容器可以实现高效的添加删除,但是随机访问的效率却很低;
deque容器支持对所有元素的随机访问,在容器的首部和尾部可以高效地添加删除元素,但是在中间位置添加删除元素却又很低效。
注:*应用中占优势的操作将决定使用哪种类型的容器。
6 容器适配器
适配器概念的定义:是一种标准库类型,函数或迭代器,使一种标准库类型,函数或迭代器的行为类似于另一种标准库类型,函数或迭代器。本质上,适配器是使一种事物的行为类似于另
一种事物行为的机制。容器适配器在其基础容器上定义一个新的接口,使基础容器拥有另一种不同容器的工作方式。
顺序容器适配器:stack(栈),queue(队列),priority_queue(优先级队列)。
a)容器适配器通用的操作和类型:
size_type 一种类型,存储此适配器类型最大对象的长度;
value_type 元素类型;
container_type 基础容器的类型;
A a;创建一个新的容器适配器;
A a(c);创建一个新的容器适配器a,初始化为c的副本;
关系操作符:==,!=,<,<=,>,>=。
b)适配器的初始化:
deque
stack
stack
注:*stack适配器和queue适配器的基础容器默认为deque,priority_queue的基础容器默认为vector。
c)覆盖基础容器类型:
deque
stack
注:*stack适配器关联的基础容器可以是任意一种顺序容器类型;
*queue适配器要求基础容器必须提供push_frong操作,只能建立在list容器上;
*priority_queue适配器要求提供随机访问操作,只能建立在vector或deque容器上;
d)栈适配器的操作:
s.empty();返回栈是否为空;
s.size();返回栈中的元素个数;
s.pop();删除栈顶元素,返回void;
s.top();返回栈顶元素,但不删除该元素;
s.push(item);在栈顶压入新元素;
注:*程序员不能直接使用栈适配器所关联的基础容器的操作。
e)队列和优先级队列的操作:
q.empty();返回队列是否为空;
q.size();返回队列中的元素个数;
q.pop();删除队首元素,返回void;
q.front();返回队首元素,但不删除元素,只适用于队列;
q.back();返回队尾元素,但不删除元素,只适用于队列;
q.top();返回具有最高优先级的元素,但不删除该元素,只适用于优先级队列;
q.push(item);对于queue,在队尾压入一个元素;对于priority_queue,在基于优先级的适当位置插入一个元素。
作者:马哈鱼