《(7.9)--7.9 顺序容器之vector和deque面向对象程序设计.ppt》由会员分享,可在线阅读,更多相关《(7.9)--7.9 顺序容器之vector和deque面向对象程序设计.ppt(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 顺序容器之顺序容器之vector和和deque在此输入您的封面副标题STL顺序容器概述顺序容器有以下三种:可变长动态数组 vector(向量容器)双端队列 deque 双向链表 list它们之所以被称为顺序容器,是因为元素在容器中的位置同元素的值无关,即容器不是排序的。将元素插入容器时,指定在什么位置(尾部、头部或中间某处)插入,元素就会位于什么位置。容器都是类模板。它们实例化后就成为容器类。用容器类定义的对象称为容器对象。例如:vector v;/vector是类模板,vector是其实例化得到的类,v是vector类的对象,其中所有元素都是double型的顺序容器的成员函数int siz
2、e():返回容器对象中元素的个数。bool empty():判断容器对象是否为空。begin():返回指向容器中第一个元素的迭代器。end():返回指向容器中最后一个元素后面的位置的迭代器。rbegin():返回指向容器中最后一个元素的反向迭代器。rend():返回指向容器中第一个元素前面的位置的反向迭代器。erase(.):从容器中删除一个或几个元素。clear():从容器中删除所有元素。front():返回容器中第一个元素的引用。back():返回容器中最后一个元素的引用。push_back():在容器末尾增加新元素。pop_back():删除容器末尾的元素。insert(.):插入一个或
3、多个元素。vector头文件:可变长度的动态数组。元素在内存中连续存放。随机存取任何元素都能在常数时间内完成。在尾端增删元素具有较佳的时间性能(大部分情况下是在常数时间完成)。除尾端外的其余位置增删元素需要在O(n)时间内完成。可以像使用数组一样通过“”运算符引用向量中的元素,通过“=”运算符为向量设置元素值a1a2aiai+1ane插入完成v.size()nn+1v插入位置为第i个元素之前vector举例#include#include using namespace std;template void PrintVector(const vector&v)/用于输出vector容器的全部元
4、素的函数模板 typename vector:const_iterator i;for(i=v.begin();i!=v.end();+i)cout *i ;cout endl;int main()int a5=1,2,3,4,5;vector v(a,a+5);cout v.end()-v.begin()endl;PrintVector(v);v.insert(v.begin()+2,13);PrintVector(v);v.erase(v.begin()+2);PrintVector(v);vector v2(4,100);v2.insert(v2.begin(),v.begin()+1,
5、v.begin()+3);PrintVector(v2);v.erase(v.begin()+1,v.begin()+3);PrintVector(v);return 0;程序运行结果:5 1 2 3 4 51 2 13 3 4 5 1 2 3 4 52 3 100 100 100 100 1 4 5 dequedeque 也是顺序容器的一种,是双端队列。要使用 deque,需要包含头文件。所有适用于 vector 的操作都适用于 deque。deque 和 vector 有很多类似的地方。在 deque 中,随机存取任何元素都能在常数时间内完成(但慢于vector)。它相比于 vector
6、的优点是,vector 在头部删除或添加元素的速度很慢,在尾部添加元素的性能较好,而 deque 在头尾增删元素都具有较好的性能(大多数情况下都能在常数时间内完成)。它有两种 vector 没有的成员函数:void push_front(const T&val);/将 val 插入容器的头部void pop_front();/删除容器头部的元素#include#include#include /包含双端队列容器头文件#include/包含算法头文件using namespace std;int main()deque values;/声明一个双精度型deque序列容器 ostream_iter
7、ator output(cout,);values.push_front(2.2);/应用函数push_front在deque容器开头插入元素 values.push_front(3.5);values.push_back(1.1);/应用函数push_back在deque容器结尾插入元素 for(int i=0;i values.size();+i)cout values i ;coutendl;values.pop_front();/应用函数push_front从deque容器中删除第一个元素 copy(values.begin(),values.end(),output);coutendl;values 1 =5.4;/应用操作符来重新赋值 copy(values.begin(),values.end(),output);return 0;程序运行结果:3.5 2.21.1 2.21.1 2.25.4