deque

  • deque是双端队列, 是动态大小的序列容器, 可以向两端伸缩
  • 与vector不用的是, deque不能保证所有的元素存储在连续的空间中, 在deque中通过指针加偏移量方式访问元素可能会导致非法的操作. vector在头部和尾部进行插入和删除操作更加高效
  • vector使用了动态数组, 该数组通常需要动态增长. deque中的元素可能分散在不同的存储块中, 在deque中保存了一些必要的信息
  • 除了在频繁在头部或尾部进行插入和删除操作之外, deque比list和forward_list的性能更差

deque的使用

  • deque的构造
    deque()					// 构造空的双端队列
    deque(n, val = val_t())		// 用n个值为val的元素构造双端队列
    deque(Inputlterator first, Inputlterator last)	// 用(first, last)的区间构造双端队列
    deque(const deque& x)		// 双端队列的拷贝构造函数
    
  • deque的迭代器
    [begin(), end()]		// begin:容器起始位置 end:最后一个元素的下一个位置
    [rbegin(), rend()]		// rbegin在end位置, rend在begin位置
    [cbegin(), cend()]		// const迭代器, 与begin和end位置相同, 但不能修改其空间内容
    [crbegin(), crend()]	// const反向迭代器, 与rbegin和rend位置相同
    
  • deque的容器操作
    size()					// 返回deque中有效元素的个数
    empty()					// 检测deque是否为空, 是返回true, 否则返回false
    resize(sz, value)		// 将deque中的元素改变到sz, 多出的空间用value填充
    
  • deque的元素访问操作
    operator[]				// 返回deque中n位置的元素引用
    front()					// 返回deque中首元素的引用
    back()					// 返回deque中最后一个元素的引用
    
  • deque中修改操作
    push_back()/pop_back()			// 尾插/尾删
    push_front()/pop_front()		// 头插/头删
    insert(pos, value)				// 在pos位置插入value
    erase(pos)						// 删除pos位置的元素
    swap()							// 交换两个元素的内容
    clear()							// 将deque的元素清空
    

deque的应用场景

如果只是简单的存储元素, 使用vector即可, 如果对元素任意位置进行插入或者删除操作较多, 使用list即可. 一般很少使用deque

deque最大的应用, 就是作为标准库中stack和queue的底层结构


我们的征途是星辰大海!