一、基本概念
deque容器是一个双端数组,可以对头端进行插入删除操作,也可以对尾端进行如上的操作,它与vector容器有所差异,具体体现如下:
1、 vector对于头部的插入删除效率低,数据量越大,效率越低
2、 deque相对而言,对头部的插入删除速度比vector快
3、 vector访问元素时的速度会比deque快,这和两者内部实现有关
具体的内部结构如下所示:
deque内部有中控器维护每段缓冲区中的内容,缓冲区中存放真实数据,中控器维护的是每个缓冲区的地址,使得使用deque时像—片连续的内存空间。deque容器的迭代器也是支持随机访问的。
二、deque容器的构造函数
deque deqT; 默认构造形式。
deque( beg, end); 构造函数将[beg. end)区间中的元素拷贝给本身。
deque(n, elem);构造函数将n个elem拷贝给本身。
cdeque(const deque &deq); 拷贝构造函数。
具体的实现方法如下:
deque<int> d;
for (int i = 0; i < 7; i++)
{
//默认构造
d.push_back(i);
}
PrintDeque(d);
//第二种构造方式
deque<int> d1(d.begin(), d.end());
PrintDeque(d1);
//第三种构造方式
deque<int> d2(10, 100);
PrintDeque(d2);
//第三种构造方式
deque<int> d3(d2);
PrintDeque(d3);
只读迭代器的实现:
void PrintDeque(const deque<int> &d)
{
//借用const_iterator来实现在迭代过程中,不可修改容器中的内容
for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
三、deque容器的赋值操作
语法如下:
deque& operator=( const deque &deq ) ; 重载等号操作符。
assign (beg,end ) ;将[beg, end)区间中的数据拷贝赋值给本身。
assign(n,elen); 将n个elem拷贝赋值给本身。
这里的语法样例就不再说明了,与vector容器的操作方式一致。链接: https://blog.csdn.net/qq_52302919/article/details/129117795
四、deque容器大小操作
对deque容器的大小进行操作,具体语法如下:
deque.empty(); 判断容器是否为空
deque.size();返回容器中元素的个数
deque.resize( num ) ;重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
deque.resize( nun, elem);重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
这里的语法样例就不再说明了,与vector容器的操作方式一致。
五、deque容器插入和删除
给deque容器中进行插入和删除操作,具体语法如下:
push_back(elem);尾插法
push_back(elem);头插法
pop_back();尾删法
pop_front();头删法
insert(pos,elem);在pos位置插入一个elem元素的拷贝,返回新数据的位置。
insert ( pos, n, elem); 在pos位置插入n个elem数据,无返回值。
insert( pos ,beg, end) ;在pos位置插入[beg,end)区间的数据,无返回值。clear( );清空容器的所有数据
erase(beg ,end) ;删除[beg.end)区间的数据,返回下一个数据的位置。
erase( pos);删除pos位置的数据,返回下一个数据的位置。
部分样例如下:
//在容器d中的开头位置插入d1从begin到end区间的数据
d.insert(d.begin(), d1.begin(), d1.end());
六、deque容器的数据存取操作
函数接口如下:
at(int idx); 返回索引idx所指的数据
operator[];返回索引idx所指的数据
front();返回容器中第一个数据元素
back();返回容器中最后一个数据元素
这里的语法样例就不再说明了,与vector容器的操作方式一致。
七、deque排序
可以利用算法对deque内部的数据进行排序
sort(iterator beg, iterator end) ;对beg和end区间内元素进行排序
样例如下:
//创建容器
deque<int> d;
//尾插数据
d.push_back(10);
d.push_back(5);
d.push_back(15);
d.push_back(3);
//打印容器内的内容
printd1(d);
//对容器内的内容进行排序,默认排序规则为升序
//对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序
sort(d.begin(), d.end());
//打印容器内的内容
printd1(d);