deque即双端队列。头文件#include
deque是双端数组可以对头端进行插入删除操作
deque和vector的区别:
1.vector对于头部的插入删除效率很低,数据量越大效率越低
2.deque相对而言,对头部的插入删除效率比vector快
3.vector访问元素时的速度会比deque快,这和两者的内部实现有关。
vector相当于的数组,而deque内部有个中控器,维护每段缓冲区的内容,缓冲区存放真实数据。中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间。
deque的构造函数
void print(const deque<int>& d)
{
for (deque<int>::const_iterator it = d.begin();it != d.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test01()
{
deque<int>d1;
for (int i = 1; i <= 10; i++)
{
d1.push_back(i);
}
print(d1);//1 2 3 4 5 6 7 8 9 10
deque<int>d2(d1.begin(), d1.end());
print(d2);//1 2 3 4 5 6 7 8 9 10
deque<int>d3(10, 100);
print(d3);//100 100 100 100 100 100 100 100 100 100
deque<int>d4(d1);
print(d4);//1 2 3 4 5 6 7 8 9 10
}
deque赋值
void print(const deque<int>& d)
{
for (deque<int>::const_iterator it = d.begin();it != d.end(); it++)
{
cout << *it << " ";
}
cout << endl;
}
void test01()
{
deque<int>d1;
for (int i = 1; i <= 10; i++)
{
d1.push_back(i);
}
print(d1);//1 2 3 4 5 6 7 8 9 10
deque<int>d2;
d2 = d1;
print(d2);//1 2 3 4 5 6 7 8 9 10
deque<int>d3;
d3.assign(d1.begin(), d1.end());
print(d3);//1 2 3 4 5 6 7 8 9 10
deque<int>d4;
d4.assign(10, 100);
print(d4);//100 100 100 100 100 100 100 100 100 100
}
deque大小操作
void test01()
{
deque<int>d1;
for (int i = 1; i <= 10; i++)
{
d1.push_back(i);
}
print(d1);//1 2 3 4 5 6 7 8 9 10
deque<int>d2;
if (!d1.empty())
{
cout << "容器不为空" << endl;
}
cout << "容器中元素个数为:" << d1.size() << endl;
//容器不为空
//容器中元素个数为:10
}
成员函数resize(num)重新指定容器的长度为num,若容器变长,则以默认值填充位置,如果容器变短,则末尾超出容器的元素被删除。
resize(num,elem)同理。
deque容器的插入操作
成员函数:
push_back() 在容器末端添加一个元素
push_front() 在容器头部添加一个元素
pop_back() 删除容器最后一个元素
pop_front() 删除容器第一个元素
void test01()
{
deque<int>d1;
for (int i = 1; i <= 10; i++)
{
d1.push_back(i);
}
print(d1);//1 2 3 4 5 6 7 8 9 10
deque<int>::iterator it = d1.begin();
d1.insert(it, 1000);
print(d1);//1000 1 2 3 4 5 6 7 8 9 10
deque<int>::iterator it2 = d1.begin();
d1.insert(it2, 2, 100);
print(d1);//100 100 1000 1 2 3 4 5 6 7 8 9 10
deque<int>d2 = d1;
deque<int>::iterator it3 = d2.begin();
it3 += 3;
d2.insert(it3, d1.begin(), d1.end());
print(d2);//100 100 1000 100 100 1000 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
d1.clear();//清空容器所有数据;
d2.erase(d2.begin());//擦除d2.begin()所指向的数据
d2.erase(d2.begin(), d2.end());//擦除区间内的数据
}
deque中数据的获取:
该容器可以跳跃式访问
[]和at都可以获取,懒得写了
void test01()
{
deque<int>d1;
for (int i = 1; i <= 10; i++)
{
d1.push_back(i);
}
print(d1);//1 2 3 4 5 6 7 8 9 10
cout << d1.front() << endl;//获取第一个元素
cout << d1.back() << endl;//获取最后一个元素
}
关于deque容器的排序问题
deque容器并未提供用于排序的成员函数。事实上能够跳跃式访问的容器都没有提供成员函数sort。
对于支持随机访问的迭代器的容器,都可以直接使用sort函数进行排序。头文件#include<algorithm>
;
无了…