1 初始化
2 迭代器支持的操作
--常用
--vector和deque
3 阶段示例一
vector<int>::iterator _vector_2(vector<int>::iterator ibegin,vector<int>::iterator iend,int i)
{
}
-------------------------------
#include <iostream.h>
#include <vector.h>
#include <string>
using namespace std; //string
vector<int>::iterator _vector_2(vector<int>::iterator ibegin,vector<int>::iterator iend,int i);
void main()
{
}
4
--1)容器定义的类型别名
--2)begin,end,rbegin,rend成员
--3)添加元素操作
--4)容器大小操作
--5)访问容器内元素的操作
--6)删除元素操作
--7)赋值与swap操作
--8)capacity和reserve成员
----capacity()容量和,size()的区别;size()说明是容器现有的元素个数,capacity()说的是可以有的元素的个数;一般capacity比size大,空容器都为0;....至于capacity分配策略不是特别清晰!!!
----reserve,可以定义改变capacity,好处是加快容器插入速度;
--9)容器间的比较
--10容器比较 vector deque list
--vector deque
优点:按顺序存储,访问速度快(可以用偏移量p+n,可用下标)
缺点:vector在非尾部,插入或者删除数据时,为保证顺序存储,其他元素会相应移动位置
--list
缺点:元素访问开销大,不是顺序存储,如指针指向5元素,要想访问10元素,必须先遍历5和10间的元素才能访问到;(不能用偏移量和下标)
优点:任何位置插入,删除数据的时候,都不必移动位置.
--选用容器,则看需要看改容器经常的操作;
标准库提供了三种顺序容器适配器:queue、priority_queue、stack.适配器是标准库中通用的
概念,包括容器适配器、迭代器适配器和函数适配器。本质上,适配器是使一事物的行为类似于另
一类事物的行为的一种机制。容器适配器让一种已存在的容器类型采用另一种不同的抽象类型的工
作方式实现。例如,stack适配器可使任何一种顺序容器以栈的方式工作。如下列出了所有容器适配
器通用的操作和类型。
size_type
value_type
container_type
A
A
关系操作符
使用适配器时,必须包含相关的头文件:
#include<stack>
适配器的初始化
deque<int> deq;
stack<int> stk(deq);
覆盖基础容器类型
默认的stack和queue都基于deque容器实现,而priority_queue则在vector容器上实现。在创建适
配器时,通过将一个顺序容器指定为适配器的第二个类型实参,可覆盖其关联的基础容器类型:
stack< string, vector<string> > str_stk;
stack< string, vector<string> > str_stk(svec);
对于给定的适配器,其关联的容器必须满足一定的约束条件。stack适配器所关联的基础容器可以是
任何一种顺序容器类型。因此,stack栈可以建立在vector、list、deque容器之上。而queue适配器
要求其关联的基础容器必须提供push_front运算,因此只能建立在list和deque容器上,而不能建立
在vector容器上。priority_queue适配器要求提供随机访问功能,因此可建立vector或deque容器上,
但不能建立在list容器上。
适配器的关系运算
两个相同类型的适配器可以做==、!=、<、<=、>、>= 关系比较,只要基础元素类型支持等于和小
于操作符即可。这些关系运算由元素依次比较来实现。第一对不相等的元素将决定两者之间的小于
或大于关系。
栈适配器
s.empty()
s.size()
s.pop()
s.top()
s.push(item)
队列和优先级队列
q.empty()
q.size()
q.pop()
q.front()
q.back()
q.top()
q.push(item)
对于priority_queue,在基于优先级的适当位置插入新元素
注意:所有容器适配器都根据其基础容器类型所支持的操作来定义自己的操作。例如,默认情况下
栈适配器建立在deque容器上,因此采用deque提供的操作来实现栈功能。比如说,执行下面的语
句 intStack.push(ix++); 这个操作通过调用push_back操作来实现,而该push_back操作由intStack
所基于的deque对象提供。尽管栈是以deque容器为基础实现的,但是程序员不能直接访问deque
所提供的操作。不能在栈上调用push_back函数,而是必须使用栈所提供的名为push的操作。
(2011-10-30 11:28:40)