C++ STL之deque学习记录

头文件

#include<deque>

简介

参见http://www.cplusplus.com/reference/deque/deque/

Double ended queue(双向队列)

deque (usually pronounced like "deck") is an irregular acronym of double-ended queue. Double-ended queues are sequence containers with dynamic sizes that can be expanded or contracted on both ends (either its front or its back).

1. 随机访问,支持[]访问和迭代器访问,这点与vector相似,但是性能没有vector好

2. 可以进行插入和删除操作,这与list相似,但是性能没有list好

3. deque的元素在内存上并不连续,而是将其分成许多个连续的内存块,这与vector的连续内存以及list的分离内存都有所区别,因此就表现为以上的特点。

成员函数

构造函数(constructor):参见http://www.cplusplus.com/reference/deque/deque/deque/

    1. 默认构造函数(defalult constructor)

        deque():创建一个新的空双向对列,没有元素。

        deque(size_type n):创建一个新的双向队列,大小为n

    2. 填充构造函数(fill constructor)

        deque(size_type n, const value_type &val):创建一个新的双向队列,大小为n,每一个元素都是val

        例:deque<int> first(4, 100);//创建一个名为first的双向队列,大小为4,每个元素都是100

    3. 范围构造函数(range constructor)

        deque(iterator begin, iterator end): 创建一个新的双向队列,并且将迭代器begin和end中间的所有元素复制过来

        例:deque<int> second(first.begin(), first.end());//创建了一个名为second的双向队列,并将first中从开始到结尾的元素复制给second

    4. 拷贝构造函数(copy constructor)

        denque(const deque& x): 用双向队列x构造一个相同的双向队列 

迭代器(iterator)函数:

    1. begin(), end(): iterator begin(); iterator end();  //return iterator to beginning(end);

    2. rbegin(), rend(): iterator rbegin(); iterator rend();  //return iterator to reverse beginning(reverse end);

    2. cbegin(), cend(), crbegin(), crend(): iterator cbegin(); iterator cend();iterator crbegin(); iterator crend();  //constant

容量(Capacity)函数:

    1. size() : size_type size(); //return the size of current deque

    2. max_size(): size_tyep max_size(); //return the maximum based on the system and implementation limitations

    3. resize(): void resize(size_type n);  

          void resize(size_type n, const value_type &val);          

          解析:If n is smaller than the current container size, the content is reduced to its first n elements, removing

those beyond (and destroying them).If n is greater than the current container size, the content is expanded

by inserting at the end as many elements as needed to reach a size of n. If val is specified, the new elements

are initialized as copies of val, otherwise, they are value-initialized.

    4. empty(): bool empty(); //reutrn true if the deque is empty else return false

    5. shrink_to_fit(): void shrink_to_fit(); //C++11 ,the deque allocates more memory than its size and it  frees the memory that contain no element

访问函数(assess elements):

    1. operator[]: value_type& operator[](size_type n);  //return a reference of the element in index n which can be changed(assign)

           const value_type& operator[](size_type n) const;  //return a reference of the element in index n which can‘t be write

    2. at: value_type& at(size_type n);  //similar to the funciton operator[]

       const value_type& at(size_type n) const;

    3. front(), back(): value_type front(size_type n);

             const value_type front(size_type n) const;

             value_type back(size_type n);

             const value_type back(size_type n) const;

 

修改函数(modifiers)

    1. assign(): void assign(iterator begin, iterator end);

           void assign(size_type n, value_type &val);

    2. push_back(), push_front(): void push_back(const value_type& val);  //push an element into the deque at back

                          void push_front(const value_type& val);  //push an element into the deque at front

    3. pop_back(), pop_front(): void pop_back();  //pop an element from the deque at back

                        void pop_front();   //pop an element from the deque at front

    4. insert(): iterator insert(const iterator it, value_type &val);  //insert a value before at specific position

          iterator insert(const iterator it, size_type n, value_type &val);  //insert n values before at specific posion

          iteraotr insert(const iterator it, iterator begin, iterator end);

          //about return value: reutrn an iterator that the newly insert element

    5. erase(): iterator erase(const iterator position);  //erase the element at specific position

           iterator etase(cosnt iterator begin, iterator end); // erase the element at the range

          //about the return value:n iterator pointing to the new location of the element that followed the last element erased by the function call.

    6. swap():  void swap(deque& x); //swap the element of the two deques

     7. clear(): void clear();  //clear the deque

    

   

  

时间: 2024-12-26 02:57:10

C++ STL之deque学习记录的相关文章

stl学习记录

Effective STL 中文版学习记录 条款4 判断容器是否为空 使用empty而不是size().size()操作在实现上不是一个时间常数操作条款5 尽量使用区间成员函数代替它们的单元素兄弟.STL实现中,区间范围显示比单个循环操作更优化 条款7:当使用new得指针的容器时,记得在销毁容器前delete那些指针vc2008下 运行代码 可以看到 该程序内存不断增加// 1111111.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h" #incl

STL标准容器类学习笔记之(Vector/Deque/List)

STL标准容器类简介 1.顺序性容器 vector相当与数组,从后面快速的插入与删除,直接访问任何元素 deque双队列,从前面或后面快速的插入与删除,直接访问任何元素 list双链表,从任何地方快速插入与删除 2.关联容器 set快速查找,不允许重复值 multiset快速查找,允许重复值 map一对一映射,基于关键字快速查找,不允许重复值 multimap一对多映射,基于关键字快速查找,允许重复值 3.容器适配器 stack后进先出 queue先进先出 priority_queue最高优先级

带你深入理解STL之Deque容器

在介绍STL的deque的容器之前,我们先来总结一下vector和list的优缺点.vector在内存中是分配一段连续的内存空间进行存储,其迭代器采用原生指针即可,因此其支持随机访问和存储,支持下标操作符,节省空间.但是其在分配的内存不够的情况下,需要对容器整体进行重新分配.拷贝和释放等操作,而且在vector中间插入或删除元素效率很低. 而list是以节点形式来存放数据,使用的是非连续的内存空间来存放数据,因此,在其内部插入和删除元素的时间复杂度都是O(1),但是其不支持随机访问和存取,不支持

STL之deque容器的实现框架

说明:本文仅供学习交流,转载请标明出处,欢迎转载! vector底层采用的是一个数组来实现,list底层采用的是一个环形的双向链表实现,而deque则采用的是两者相结合,所谓结合,并不是两种数据结构的结合,而是某些性能上的结合.我们知道,vector支持随机访问,而list支持常量时间的删除,deque支持的是随机访问以及首尾元素的删除. deque是double ended queue的缩写,读作deck.首先我们用一个图来说明deque底层所采用的数据结构. 这个数据结构有一种似曾相识的感觉

【程序员编程艺术】学习记录2:左旋转字符串之循环移位法

[程序员编程艺术]学习记录2:左旋转字符串之循环移位法 GCD算法:(辗转相除法/欧几里得算法) gcd是求最大公约数的算法,作为TAOCP第一个算法 gcd算法流程: 首先给定两个整数m,n(m大于等于n)如果小于则直接交换再处理 ①求余数 r=m%n ②假如r=0,算法结束,n即为所求 否则,重新令m <- n, n <-r 之后循环 <<<<<<<<<<<<<<<<<<<&l

Python学习记录-2016-12-17

今日学习记录 模块: import os#导入os模块 import sys#导入sys模块 os.system("df -h")#执行df -h命令 cmd_res = os.popen("df -h").read()#将命令的返回结果赋值给cmd_res,如果不加入.read()会显示命令的返回加过在内存的位置 print(sys.path)#显示系统变量路径,一般个人模块位于site-packages下,系统模块位于lib下 print(sys.argu[2]

Objc基础学习记录5

NSMutableString类继承的NSString类. NSMutableString是动态的字符串. 1.appendingString 方式: 向字符串尾部添加一个字符串. 2.appendingFormat:可以添加多个类型的字符串. int,chat float,double等 3.stringWithString 创建字符串, 4.rangeOfString 返回str1在另一个字符串中的位置. 5.NSMakeRange(0,3) 字符串0位到3位. 6.deleteCharac

Windows API 编程学习记录&lt;二&gt;

恩,开始写Windows API编程第二节吧. 上次介绍了几个关于Windows API编程最基本的概念,但是如果只是看这些概念,估计还是对Windows API不是很了解.这节我们就使用Windows API 让大家来了解下Windows API的用法. 第一个介绍的Windows API 当然是最经典的MessageBox,这个API 的作用就是在电脑上显示一个对话框,我们先来看看这个API的定义吧: int WINAPI MessageBox(HWND hWnd, LPCTSTR lpTe

Windows API 编程学习记录&lt;三&gt;

恩,开始写API编程的第三节,其实马上要考试了,但是不把这节写完,心里总感觉不舒服啊.写完赶紧去复习啊       在前两节中,我们介绍了Windows API 编程的一些基本概念和一个最基本API函数 MessageBox的使用,在这节中,我们就来正式编写一个Windows的窗口程序. 在具体编写代码之前,我们必须先要了解一下API 编写窗口程序具体的三个基本步骤:             1. 注册窗口类:             2.创建窗口:             3.显示窗口: 恩,