1.顺序容器(vector set list)的操作包括:
1)添加元素
2)删除元素
3)设置容器大小
4)获取容器元素
2.容器类型别名
size_tpye,无符号整型,容器长度
iterator,容器迭代器
const_iterator,只读容器迭代器
reverse_iterator,逆序迭代器
const_reverse_iterator只读逆序迭代器
difference_tpye,两个迭代器差值,有符号整数,可为负数
value_tpye元素类型
reference,元素的引用
const_reference 元素的常量引用
void test()
{
int i;
vector<int>::size_type t;
vector<int>::iterator it;
vector<int>::const_iterator cit;
vector<int>::reverse_iterator rit;
vector<int>::difference_type dt;
vector<int>::value_type vt;
vector<int>::reference ret=i;
}
3.begin和end成员
c.begin()指向第一个元素的迭代器
c.end()指向最后一个元素的迭代器
c.rbegin()逆序迭代器,指向容器的最后一个元素
c.rend()逆序迭代器,指向容器第一个元素的前面
void test2()
{
vector<int> v;
vector<int>::iterator it1= v.begin();
vector<int>::iterator it2= v.end();
vector<int>::reverse_iterator it3 = v.rbegin();
vector<int>::reverse_iterator it4 = v.rend();
}
4.顺序容器的操作
c.push_back(e)在容器末尾添加一个元素
c.push_front(e)在容器前端添加一个元素(只有list和deque可以,vector不可以)
c.insert(p,e)在指定位置插入
c.insert(p,n,e)在指定位置添加n个元素
c.insert(p,b,e)在指定位置插入b迭代器开始e结束个元素
注意:添加或删除元素,会使迭代器失效
4.vector的内容分配策略
vector中的元素的连续存储的,以便通过索引的方法快速访问
但是如果分配的内容空间使用完后,必须重新分配内存空间,并且要移动所有元素,这样他的性能就会降低,但事实上,vector分配的内存空间会比他的实际使用空间大,这样就可以提高性能。
例如:
void test4()
{
vector<int> v;
cout<<v.size()<<endl;
cout<<v.capacity()<<endl;
cout<<"--------------------"endl;
for(int i=1;i<=10;i++)
v.push_back(i);
v.reserve(30)//预留空间
cout<<c.size()<<endl;//当前大小
cout<<v.capacity()<<endl;//空间大小
}
5.顺序容器的选择
1.vector和deque可以对元素进行快速的随机访问,但是插入和删除效率较低,因为需要移动其他元素
2.list在插入和删除上比较快,但是随机访问比较慢,因为它的元素不连续。
3.容器的选择
1)如果程序要求随机访问元素,应该使用vector和deque容器
2)如果程序必须要在中间插入或者删除,则使用list
3)如果不是在中间位置,而是在首位置插入或者删除元素,则用deque(双向队列)
6.容器的适配器
1.适配器是一种设计模式,即在原有接口添加新的接口,使其适合另外一种操作。
2.顺序容器有三种适配器
stack后进先出(LIFO)栈
queue先进先出(FIFO)
priority_queue 优先级队列
3.适配器的类型和声明
size_type 大小
value_type 元素类型
container 容器类型
注意:stack queue是基于deque实现,所以不能使用vector和list构造,而priority_queue在vector容器上实现