目录[-]


1、deque、list、vector区别

• deque与vector在存储上的不同:deque为非连续存储,当前段存储满后,将新申请的内存挂接在原段的后面,之前的数据无需操作。vector则当前段存储满后,申请更大的内存,将原来的数据拷贝到新内存中。

• vector:随机访问操作频率高。
• list:插入删除频率高,但只可在头部尾部进行添加与删除。
• deque:通过 [ ] 以及 .at(int)支持随机访问,可在内部进行插入与删除。但性能不及list。


2、deque容器

deque容器为一个给定类型的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素。但它又与vector不同,deque支持高效插入和删除容器的头部元素,因此也叫做双端队列。deque类常用的函数如下。

# 定义方式
    std::deque<int> numberOfArray;
# 向双端队列头部增加数据
    numberOfArray.push_front(2);
# 向双端队列尾部增加数据
    numberOfArray.push_back(3);
# 删除双端队列头部数据
    numberOfArray.pop_front();
# 删除双端队列尾部数据
    numberOfArray.pop_back();
# 清除双端队列中的所有数据
    numberOfArray.clear();
# 为双端队列分配内容
    numberOfArray.assign(2,100);//分配两个100
# 在指定位置处增加一个数据
    numberOfArray.insert(numberOfArray.begin(),2);
# 等价于numberOfArray.push_front(2);
# 在指定位置处增加多个相同的数据
    numberOfArray.insert(numberOfArray.begin(),6,2);//添加6个2
# 复制两个指定位置间的数据
    numberOfArray.insert(numberOfArray.begin(),numberOfArray.begin),end());
# 返回指定位置的元素
    numberOfArray.at(1);
# 返回首元素应用
    numberOfArray.front();
# 返回尾巴元素应用
    numberOfArray.back();
# 判断双向队列大家哦儿哦0
    numberOfArray.empty();
# 返回元素中数据格式
    numberOfArray.size();

3、示例

#include<iostream>
#include<deque>

int main(int argc, char* argv[]){
	std::deque<int> numberOfArray;
	numberOfArray.push_front(2);
	numberOfArray.push_front(4);
	numberOfArray.push_front(3);
	//numberOfArray.pop_back();
	for(unsigned char i =0;i<numberOfArray.size();++i)
	std::cout<<numberOfArray.at(i)<<std::endl;
}