C++ STLdeque基本概念
- vector和deque区别:
vector对于头部的插入和删除效率低,数据量越大,效率越低
deque相对而言对于头部的插入和删除速度比vector快(deque支持头部和尾部的删除和插入操作)
vector访问元素的速度会比deque快,这和两者内部实现有关
-
deque内部工作原理:
deque内部有个中控器,维护每段缓冲器中的内容,缓冲器存放真实数据
中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间
对头部数据和尾部数据的插入和删除比较快,但访问元素时,需要找到指针指向对应的缓存区,比较慢 -
deque构造函数
1.deque deq //默认构造函数
2.deque(beg,end) //构造函数将(beg,end)区间中的元素拷贝给本身
3.deque(n, elem) //构造函数将n个elem拷贝给本身
4.deque(const deque &deq) //拷贝构造函数 -
deque赋值操作
1.deque& operator=(const deque&deq) //重载赋值操作运算符
2.assign(beg, end) //将beg到end之间数据拷贝给本身
3.assign(n, elem) //将n个elem赋值给本身 -
deque大小操作
deque.empty() //判断容器是否为空
deque.size() //返回容器中元素个数(deque没有容量大小之说)
deque.resize(num) //重写指定容器长度为num,若容器变长则以默认值填充新位置
//如果容器变短,则末尾超出容器长度的元素被删除
deque.resize(num,elem)//重写指定容器长度为num,若容器变长则以elem值填充新位置
//如果容器变短,则末尾超出容器长度的元素被删 -
两端插入操作
push_back(elem); //容器尾部添加
push_front(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位置的数据,返回下一个数据的位置
#include <iostream>
#include <string>
#include <deque>
using namespace std;
//传入常引用,则对应的迭代器也是常迭代器
void printdeque(const deque<int> &deq)
{
for (deque<int>::const_iterator it=deq.begin(); it!=deq.end(); it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
//构造函数的使用
void test1()
{
deque<int> deq;
for (int i = 0; i<10; i++)
{
//deq.push_back(i); //尾插入0 1 2 3 4 5 6 7 8 9
deq.push_front(i); //头插入9 8 7 6 5 4 3 2 1 0
}
printdeque(deq);
deque<int> deq1(deq.begin(), deq.end());
printdeque(deq1);
deque<int> deq2(10, 0);
printdeque(deq2);
deque<int> deq3(deq2);
printdeque(deq3);
}
//赋值操作函数
void test2()
{
deque<int> deq;
for (int i = 0; i<10; i++)
{
deq.push_back(i);
}
printdeque(deq);
deque<int> deq1=deq;
printdeque(deq1);
deque<int> deq2;
deq2.assign(deq.begin(), deq.end());
printdeque(deq2);
deque<int> deq3;
deq3.assign(10, 0);
printdeque(deq3);
}
//deque大小操作
void test3()
{
deque<int> deq;
for (int i = 0; i<10; i++)
{
deq.push_back(i);
}
if (deq.empty())
{
cout<<"deq为空"<<endl;
}
else
{
cout<<"deq不为空"<<endl;
cout<<"大小:"<<deq.size()<<endl;
}
//扩充元素个数
deq.resize(15);
printdeque(deq);
cout<<"大小:"<<deq.size()<<endl;
//缩短元素个数
deq.resize(5);
printdeque(deq);
cout<<"大小:"<<deq.size()<<endl;
//赋值指定值进行扩充
deq.resize(10, 2);
printdeque(deq);
cout<<"大小:"<<deq.size()<<endl;
}
int main()
{
//test1();
//test2();
test3();
return 0;
}
上一篇: 环形队列缓存(C#版)
下一篇: C++STL之双端队列Deque