cpp►STL容器->序列容器->deque
Posted itzyjr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cpp►STL容器->序列容器->deque相关的知识,希望对你有一定的参考价值。
描述
std::deque
template <class T, class Alloc = allocator<T>> class deque;
deque=double + ended + queue.
双端队列是具有动态大小的序列容器,可以在两端(前端或后端)展开或收缩。
特定的库可能以不同的方式实现deques,通常作为某种形式的动态数组。但在任何情况下,它们都允许通过随机访问迭代器直接访问单个元素,并根据需要通过扩展和收缩容器来自动处理存储。
因此,它们提供了类似于vectors的功能,但是在序列的开头,而不仅仅是在序列的结尾,可以有效地插入和删除元素。但是,与vector不同,deque不能保证将其所有元素存储在相邻的存储位置:通过偏移指向另一个元素的指针来访问deque中的元素会导致未定义的行为。
vectors和deques都提供了一个非常相似的接口,可以用于类似的目的,但在内部,它们的工作方式都完全不同:vector使用单个数组,需要偶尔重新分配以进行增长,deque的元素可以分散在不同的存储块中,容器在内部保存必要的信息,以便在恒定时间内提供对其任何元素的直接访问,并具有统一的顺序接口(通过迭代器)。因此,deque在内部要比vector复杂一点,但这使得它在某些情况下能够更有效地增长,特别是对于非常长的序列,在这种情况下,重新分配变得更昂贵。
对于涉及除开始或结束位置以外的元素的频繁插入或删除操作,deque的性能更差,迭代器和引用的一致性不如list和forward_list。
容器属性(Container properties)
- Sequence
序列容器中的元素按严格的线性序列排序。单个元素通过其在此序列中的位置进行访问。 - Dynamic array
通常作为动态数组实现,它允许直接访问序列中的任何元素,并在序列的开始或结束时提供相对快速的元素添加/移除。 - Allocator-aware
容器使用分配器对象动态处理其存储需求。
// constructing deques
#include <iostream>
#include <deque>
int main() {
unsigned int i;
std::deque<int> first;// empty deque of ints
std::deque<int> second(4, 100);// 4 ints with value 100
std::deque<int> third(second.begin(), second.end());// iterating through second
std::deque<int> fourth(third);// a copy of third
// the iterator constructor can be used to copy arrays:
int myints[] = { 16,2,77,29 };
std::deque<int> fifth(myints, myints + sizeof(myints) / sizeof(int));
std::cout << "The contents of fifth are:";
for (std::deque<int>::iterator it = fifth.begin(); it != fifth.end(); ++it)
std::cout << ' ' << *it;
return 0;
}
The contents of fifth are: 16 2 77 29
以上是关于cpp►STL容器->序列容器->deque的主要内容,如果未能解决你的问题,请参考以下文章