c++STL容器之deque容器

deque是双端数组

deque和vector的区别

  • vector对于头部的插入和删除效率低,数据量越大,效率越低;
  • deque相对于而言,对头部的插入和删除比vector快;
  • vector访问元素时速度比deque快,这和两者的内部实现有关;

deque内部工作原理

deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放着真实数据。中控器维护的是每个缓冲区的地址,使得使用每个deque时像一块连续的内存空间。

deque容器的迭代器是支持随机访问的。

一、deque构造函数

deque<T> deqT
deque(beg,end)
deque(n,elem)
deque(const deque &deq)
#include<iostream>
#include<deque>
using namespace std;
//加入const限制只读,并使用const_iterator
void printDeque(const deque<int>&d) {
    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
        cout << *it <<" ";
    }
    cout << endl;
}

void test() {
    deque<int> d1;
    for (int i = 0; i < 10; i++) {
        d1.push_back(i);
    }
    printDeque(d1);
    deque<int> d2(d1.begin(),d1.end());
    deque<int> d3(4,3);
    deque<int> d4(d1);
}
int main() {
    test();
    system("pause");
    return 0;
}

二、赋值操作(基本上与vector一致)

#include<iostream>
#include<deque>
using namespace std;
//加入const限制只读,并使用const_iterator
void printDeque(const deque<int>&d) {
    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
        cout << *it <<" ";
    }
    cout << endl;
}

void test() {
    deque<int> d1;
    for (int i = 0; i < 10; i++) {
        d1.push_back(i);
    }
    deque<int> d2;
    d2 = d1;
    deque<int> d3;
    d3.assign(d1.begin(),d1.end());
    deque<int> d4;
    d4.assign(4, 3);
}
int main() {
    test();
    system("pause");
    return 0;
}

三、deque大小操作(与vector也基本一致,但是deque中没有容量capaticy限制)

四、deque插入和删除

//两端插入
push_back(ele);
push_front(ele);
pop_back();
pop_front();
//指定位置插入、删除,pos,beg,end都是迭代器
insert(pos,ele);
insert(pos,n,ele);
insert(pos,beg,end);
clear();
erase(beg,end);
erase(pos);

五、deque数据存取(与vector一致,多了取头部的操作)

deque<int> d1 ={1,2,3,4};
访问第一个元素:
d1[0];
d1.at(0);
修改第一个元素:
d1[0] = 2;
d1.at(0) = 2;
访问首元素:
d1.front();
访问尾元素:
d1.back();

六、deque排序(利用algorithm中的sort,默认升序排序)

#include<iostream>
#include<deque>
#include<algorithm>
using namespace std;
//加入const限制只读,并使用const_iterator
void printDeque(const deque<int>&d) {
    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
        cout << *it <<" ";
    }
    cout << endl;
}

void test() {
    deque<int> d1;
    for (int i = 0; i < 10; i++) {
        d1.push_front(i);
    }
    cout << "排序前:" << endl;
    printDeque(d1);
    sort(d1.begin(), d1.end());
    cout << "排序后:" << endl;
    printDeque(d1);
}
int main() {
    test();
    system("pause");
    return 0;
}

原文地址:https://www.cnblogs.com/xiximayou/p/12111628.html

时间: 2024-10-10 02:21:27

c++STL容器之deque容器的相关文章

c++STL容器之string容器

本质:string是c++风格的字符串,而string本质上是一个类 string和char*的区别: char*是一个指针: string是一个类,类内部封装了char*,管理这个字符串,是一个char*的容器: 特点: string内部封装了很多内部成员方法,例如find.copy.delete.replace.insert等. string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行操作. 一.string构造函数 string():创建一个空的字符串 strin

c++STL容器之list容器

链表:将数据进行链式存储.物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接进行实现的. STL中的链表是一个双向循环链表. 一.构造函数 list<T> lst; list(bag,end); list(n,elem); list(const list &list); 二.list的赋值和交换 assign(beg,end); assign(n,ele); list& operator=(const list &list); swap(list)

c++STL容器之stack容器

栈:先进后出. 一.构造函数 stack<T> stk; stack<const stack& stk>; 二.赋值操作 stack& operator=(const stack &stk); 三.数据存取 push(ele); pop(); top(); 四.大小操作 empty(); size(); 原文地址:https://www.cnblogs.com/xiximayou/p/12111639.html

c++STL容器之queue容器

队列:先进先出. 一.构造函数 queue<T> que; queue(const queue &que); 二.赋值操作 queue& operator=(const queue &que); 三.数据存取 push(ele); pop(); back(); front(); 四.大小操作 empty(); size(); 原文地址:https://www.cnblogs.com/xiximayou/p/12111651.html

STL源码笔记(12)—序列式容器之deque(二)

STL源码笔记(12)-序列式容器之deque(二) 再谈deque数据结构 我们知道deque是通过map管理很多个互相独立连续空间,由于对deque_iterator的特殊设计,使得在使用的时候就好像连续一样.有了deque_iterator的基础(例如重载的操作符等),对于我们实现容器的一些方法就十分方便了.与vector一样,deque也维护一个start,和finish两个迭代器,start指向容器中的一个元素,finish指向最后一个元素的后一个位置(前闭后开),从微观上讲,star

初探STL容器之Vector

vector 特点: 1.可变长的动态数组 2.使用时包含头文件 #include <vector> 3.支持随机访问迭代器 ? 根据下标随机访问某个元素时间为常数 ? 在尾部添加速度很快 ? 在中间插入慢 成员函数 初始化 vector(); 初始化成空 vector(int n); 初始化成有n个元素 vector(int n, const T & val); 初始化成有n个元素, 每个元素的值都是val,类型是T vector(iterator first, iterator l

初探STL容器之List

List 特点: 1.实质上是双向链表 2.使用时包含<list>头文件 #include<list> 3.不支持随机访问迭代器,只能使用双向迭代器  //因此不能使用一些算法和运算符操作 4.在任何位置的插入.删除操作都是常数时间 成员函数 初始化 list <int> intlist0; // 创建空的 intlist list <int> intlist1( 3 ); //包含3个元素 list <int> intlist2( 5, 2 )

STL 源码剖析读书笔记四:序列式容器之 deque、stack、queue

1. 序列式容器 deque 1.1 deque 概述 vector是单向开口的连续线性空间,用户只能在vector尾部进行插入删除操作,而 deque 是一种双向开口的连续线性空间,允许我们在头尾两端操作. deque 和 vector 的最大差异在于: deque 允许常数时间对头端元素进行插入和移除操作 deque 没有所谓容量(capacity)概念,因为它是动态地以分段连续的空间组合而成,随时可以增加一段新的空间并链接起来 deque提供的迭代器也是 RandomAccess Iter

C++STL模板库序列容器之deque

目录 一丶队列容器deque简介 二丶使用代码演示 一丶队列容器deque简介 deque底层跟vector一样,都是数组维护.不同的是可以操作头部. 二丶使用代码演示 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <time.h> #include <algorithm> #include <iostream> #include &