C++标准库顺序容器 (二)

2014-11-24 12:41:18 · 作者: · 浏览: 2
,而后者则是一个变量。

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 deq;

stack stk();

stack stk(deq);

注:*stack适配器和queue适配器的基础容器默认为deque,priority_queue的基础容器默认为vector。

c)覆盖基础容器类型:

deque deq;

stack > stk(deq);

注:*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,在基于优先级的适当位置插入一个元素。

作者:马哈鱼