
在处理一些数组的事情,所以随手保留一下Deque容器的使用方法
可以认为arraylist或者vector封装了对内部数组的操作,比如向数组中添加,删除,插入新的元素或者数据的扩展和重定向。2、向容器添加/删除元素可能会导致所有指向容器的迭代器、引用和指针失效。 向量 vector 特点 一个可以扩展的动态数组 随机访问、在尾部插入或删除元素快 在中间或头部插入或删除元素慢 向量的容量 容量 capacity :实际分配空间的大小 s.capacity :返回当前容量 s.reserve n :若容量小于n,则对s进行扩展,使其容量至少为n * 顺序容器 双端队列 deque 特点 在两端插入或删除元素快 在中间插入或删除元素慢 随机访问较快,但比向量容器慢 * 顺序容器 列表 list 特点 在任意位置插入和删除元素都很快 不支持随机访问 接合 splice 操作 s1.splice p, s2, q1, q2 :将s2中[q1, q2 移动到s1中p所指向元素之前 * 顺序容器 顺序容器的插入迭代器 插入迭代器 用于向容器头部、尾部或中间指定位置插入元素的迭代器 包括前插迭代器(front_inserter)、后插迭代器(back_insrter)和任意位置插入迭代器(inserter) 例: list s。
包括的头文件为:
#include <deque>
using namespace std;
声明一个deque时,一般需要前缀std::c++ deque,如std::deque<int>c;
因为类型deque是一个定义在namespace std内的template 。
构造函数:

deque<Elem> c ;//产生一个空的deque,其中没有任何元素
deque(小片的连续,小片间用链表相连,实际上内部有一个map的指针,因为知道类型,所以还是可以使用[],只是速度没有vector快)快速的访问随机的元素,快速的在开始和末尾插入元素c++ deque,随机的插入,删除元素要慢,空间的重新分配要比vector快,重新分配空间后,原有的元素不需要拷贝。bool remove(int &elem)//移除一个元素,被移除的元素赋给elem。 、 、 、 、 begin 、end :获得容器首、尾迭代器 clear :将容器清空 empty :判断容器是否为空 size :得到容器元素个数 s1.swap s2 :将s1和s2两容器内容交换 相关数据类型(s表示容器类型) s::iterator:指向容器元素的迭代器类型 s::const_iterator:常迭代器类型 容 器 可逆容器、随机访问容器 可逆容器 s::reverse_iterator:逆向迭代器类型 s::const_reverse_iterator:逆向常迭代器类型 rbegin :指向容器尾的逆向迭代器 rend :指向容器首的逆向迭代器 随机访问容器 s[n]:获得容器s的第n个元素 * 容 器 * 顺序容器 顺序容器的接口 赋值 assign 插入函数 insert, push_front(只对list和deque), push_back 删除函数 erase,clear,pop_front(只对list和deque) ,pop_back 其他顺序容器访问函数 front,back 改变大小 resize 顺序容器 例10-4 * 顺序容器 //包含的头文件略去…… template void printcontainer const char* msg, const t& s cout msg ": "。
deque<Elem> c(n) ;//产生一个大小为n的deque
deque<Elem> c(n , elem) ;//产生一个大小为n的deque,
//每个元素值都是elem。
dequer<Elem> c(begin,end); //产生一个deque,以区间[begin ; end]
//做为元素初值
析构函数:

c.~ deque<Elem>() ;销毁所有元素,并释放内存。
非变动性操作
c.size(); //返回当前的元素数量
c.empty(); //判断大小是否为零。等同于c.size() == 0,但可能更快
c.max_size(); //可容纳元素的最大数量
c.at(idx) ; //返回索引为idx所标示的元素。如果idx越界,抛出out_of_range
c[idx] ; //返回索引idx所标示的元素。不进行范围检查
c.front() ; //返回第一个元素,不检查元素是否存在

c.back(); //返回最后一个元素
c.begin(); //返回一个随机迭代器,指向第一个元素
c.end(); //返回一个随机迭代器,指向最后元素的下一位置
变动性操作:
c1 = c2; //将c2的所有元素赋值给c1;
c.assign(n , elem); //将n个elem副本赋值给c
c.assing(beg , end); //将区间[beg;end]中的元素赋值给c;
c.push_back(elem); //在尾部添加元素elem

c.pop_back() ; //移除最后一个元素(但不回传)
c.push_front() ; //在头部添加元素elem
c.pop_front() ; //移除头部一个元素(但不回传)
c.erase(pos) ; //移除pos位置上的元素,返回一元素位置
//如 c.erase( c.begin() + 5)//移除第五个元素
c.insert(pos , elem); //在pos位置插入一个元素elem,并返回新元素的位置
c.insert(pos , n , elem); //在pos位置插入n个元素elem,无返回值
c.insert(pos , beg , end);
c.resize(num); //将容器大小改为num。可更大或更小。
c.resize(num , elem);//将容器大小改为num,新增元素都为 elem
c.clear(); //移除所有元素,将容器清空
PS:Deque和Vector是智能容器,删除或者增加元素时,其他位置与元素会进行相应的移动。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-115751-1.html
米涨价了
也不会让台湾独立