C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)

简介: C++之deque容器(构造、赋值、大小、插入与删除、存取、排序)

一、基本概念

deque(double-ended queue,双端队列)是一种具有队列和栈的性质的数据结构

deque和vector区别:

vector对于头部的插入删除效率低,数据量越大,效率越低;

deque相对而言,对头部的插入删除速度回比vector快;

vector访问元素时的速度会比deque快,这和两者内部实现有关。

二、构造函数

// 打印
void printDeque(const deque<int> &d) {
    // for (int i = 0; i < d.size(); ++i) {
    //     cout << d[i]<<" ";
    // }
    // 只读迭代器
    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
        cout << *it << " ";
    }
    cout << endl;
}
 
//deque容器构造函数
void test01() {
    deque<int> d1;
    for (int i = 0; i < 10; ++i) {
        d1.push_back(i);
    }
    printDeque(d1);
 
    deque<int> d2(d1.begin(), d1.end());
    printDeque(d2);
 
    deque<int> d3(10, 1000);
    printDeque(d3);
 
    deque<int> d4(d3);
    printDeque(d4);
}

三、赋值操作

//deque容器赋值操作
void test02() {
    deque<int> d1;
    for (int i = 0; i < 10; ++i) {
        d1.push_back(i);
    }
    printDeque(d1);
 
    deque<int> d2;
    d2 = d1;
    printDeque(d2);
 
    deque<int> d3;
    d3.assign(10, 100);
    printDeque(d3);
 
    deque<int> d4;
    d4.assign(d2.begin(), d2.end());
    printDeque(d4);
}

四、大小操作

//deque容器大小
void test03() {
    deque<int> d1;
    for (int i = 0; i < 10; ++i) {
        d1.push_back(i);
    }
    // 0 1 2 3 4 5 6 7 8 9
    printDeque(d1);
    // 10
    cout << d1.size() << endl;
    // 0
    cout << d1.empty() << endl;
 
    // d1.resize(20);
    d1.resize(20, 6);
    // 0 1 2 3 4 5 6 7 8 9 6 6 6 6 6 6 6 6 6 6
    printDeque(d1);
    // 20
    cout << d1.size() << endl;
 
    d1.resize(3);
    // 0 1 2
    printDeque(d1);
    // 3
    cout << d1.size() << endl;
 
}

五、插入和删除

 
//deque容器插入和删除
//两端操作
void test04() {
    deque<int> d1;
    //尾插
    d1.push_back(10);
    d1.push_back(20);
    // 头插
    d1.push_front(30);
    d1.push_front(40);
    // 40 30 10 20
    printDeque(d1);
    // 尾删
    d1.pop_back();
    // 头删
    d1.pop_front();
    printDeque(d1);
}
 
// 中间操作
void test05() {
    deque<int> d1;
    d1.push_back(10);
    d1.push_back(20);
    d1.push_front(100);
    d1.push_front(200);
    // 200 100 10 20
    printDeque(d1);
 
    //insert插入
    d1.insert(d1.begin(), 1000);
    //1000 200 100 10 20
    printDeque(d1);
 
    d1.insert(d1.begin(), 2, 10000);
    //10000 10000 1000 200 100 10 20
    printDeque(d1);
    // 按照区间进行插入
    deque<int> d2;
    d2.push_back(1);
    d2.push_back(2);
    d2.push_back(3);
    d1.insert(d1.begin(), d2.begin(), d2.end());
    // 1 2 3 10000 10000 1000 200 100 10 20
    printDeque(d1);
}
 
// 删除
void test06() {
    deque<int> d1;
    d1.push_back(10);
    d1.push_back(20);
    d1.push_front(100);
    d1.push_front(200);
 
    //删除
    deque<int>::iterator it = d1.begin();
    it++;
    d1.erase(it);
    //200 10 20
    printDeque(d1);
    // 按照区间删除
    d1.erase(d1.begin(), d1.end());
    // 清空
    // d1.clear();
    printDeque(d1);
}

六、数据存取

 
//deque容器的数据存取操作
void test07() {
 
    deque<int> d1;
    d1.push_back(10);
    d1.push_back(20);
    d1.push_front(100);
    d1.push_front(200);
    printDeque(d1);
    // 返回索引idx所指的数据
    cout << d1.at(0) << endl;
    // 返回索引所指的数据
    cout << d1[0] << endl;
    // 返回第一个数据元素
    cout << d1.front() << endl;
    // 返回最后一个数据元素
    cout << d1.back() << endl;
 
 
}

七、deque排序

//dque容器的排序
void test08() {
    deque<int> d1;
    d1.push_back(10);
    d1.push_back(20);
    d1.push_front(100);
    d1.push_front(200);
    // 200 100 10 20
    printDeque(d1);
    // 10 20 100 200
    sort(d1.begin(), d1.end());
    printDeque(d1);
 
}

八、测试

#include <iostream>
 
using namespace std;
 
#include <deque>
#include <algorithm>
 
// 打印
void printDeque(const deque<int> &d) {
    // for (int i = 0; i < d.size(); ++i) {
    //     cout << d[i]<<" ";
    // }
    // 只读迭代器
    for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) {
        cout << *it << " ";
    }
    cout << endl;
}
 
//deque容器构造函数
void test01() {
    deque<int> d1;
    for (int i = 0; i < 10; ++i) {
        d1.push_back(i);
    }
    printDeque(d1);
 
    deque<int> d2(d1.begin(), d1.end());
    printDeque(d2);
 
    deque<int> d3(10, 1000);
    printDeque(d3);
 
    deque<int> d4(d3);
    printDeque(d4);
}
 
//deque容器赋值操作
void test02() {
    deque<int> d1;
    for (int i = 0; i < 10; ++i) {
        d1.push_back(i);
    }
    printDeque(d1);
 
    deque<int> d2;
    d2 = d1;
    printDeque(d2);
 
    deque<int> d3;
    d3.assign(10, 100);
    printDeque(d3);
 
    deque<int> d4;
    d4.assign(d2.begin(), d2.end());
    printDeque(d4);
}
 
//deque容器大小
void test03() {
    deque<int> d1;
    for (int i = 0; i < 10; ++i) {
        d1.push_back(i);
    }
    // 0 1 2 3 4 5 6 7 8 9
    printDeque(d1);
    // 10
    cout << d1.size() << endl;
    // 0
    cout << d1.empty() << endl;
 
    // d1.resize(20);
    d1.resize(20, 6);
    // 0 1 2 3 4 5 6 7 8 9 6 6 6 6 6 6 6 6 6 6
    printDeque(d1);
    // 20
    cout << d1.size() << endl;
 
    d1.resize(3);
    // 0 1 2
    printDeque(d1);
    // 3
    cout << d1.size() << endl;
 
}
 
//deque容器插入和删除
//两端操作
void test04() {
    deque<int> d1;
    //尾插
    d1.push_back(10);
    d1.push_back(20);
    // 头插
    d1.push_front(30);
    d1.push_front(40);
    // 40 30 10 20
    printDeque(d1);
    // 尾删
    d1.pop_back();
    // 头删
    d1.pop_front();
    printDeque(d1);
}
 
// 中间操作
void test05() {
    deque<int> d1;
    d1.push_back(10);
    d1.push_back(20);
    d1.push_front(100);
    d1.push_front(200);
    // 200 100 10 20
    printDeque(d1);
 
    //insert插入
    d1.insert(d1.begin(), 1000);
    //1000 200 100 10 20
    printDeque(d1);
 
    d1.insert(d1.begin(), 2, 10000);
    //10000 10000 1000 200 100 10 20
    printDeque(d1);
    // 按照区间进行插入
    deque<int> d2;
    d2.push_back(1);
    d2.push_back(2);
    d2.push_back(3);
    d1.insert(d1.begin(), d2.begin(), d2.end());
    // 1 2 3 10000 10000 1000 200 100 10 20
    printDeque(d1);
}
 
// 删除
void test06() {
    deque<int> d1;
    d1.push_back(10);
    d1.push_back(20);
    d1.push_front(100);
    d1.push_front(200);
 
    //删除
    deque<int>::iterator it = d1.begin();
    it++;
    d1.erase(it);
    //200 10 20
    printDeque(d1);
    // 按照区间删除
    d1.erase(d1.begin(), d1.end());
    // 清空
    // d1.clear();
    printDeque(d1);
}
 
//deque容器的数据存取操作
void test07() {
 
    deque<int> d1;
    d1.push_back(10);
    d1.push_back(20);
    d1.push_front(100);
    d1.push_front(200);
    printDeque(d1);
    // 返回索引idx所指的数据
    cout << d1.at(0) << endl;
    // 返回索引所指的数据
    cout << d1[0] << endl;
    // 返回第一个数据元素
    cout << d1.front() << endl;
    // 返回最后一个数据元素
    cout << d1.back() << endl;
 
 
}
 
//dque容器的排序
void test08() {
    deque<int> d1;
    d1.push_back(10);
    d1.push_back(20);
    d1.push_front(100);
    d1.push_front(200);
    // 200 100 10 20
    printDeque(d1);
    // 10 20 100 200
    sort(d1.begin(), d1.end());
    printDeque(d1);
 
}
 
int main() {
    // test01();
    // test02();
    // test03();
    // test04();
    // test05();
    // test06();
    // test07();
    test08();
    system("pause");
    return 0;
}
 


200 100 10 20
10 20 100 200

相关文章
|
存储 缓存 C++
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
C++ 标准模板库(STL)提供了一组功能强大的容器类,用于存储和操作数据集合。不同的容器具有独特的特性和应用场景,因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C++ 的开发者来说,了解这些容器的基础知识以及它们的特点是迈向高效编程的重要一步。本文将详细介绍 C++ 常用的容器,包括序列容器(`std::vector`、`std::array`、`std::list`、`std::deque`)、关联容器(`std::set`、`std::map`)和无序容器(`std::unordered_set`、`std::unordered_map`),全面解析它们的特点、用法
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
|
存储 搜索推荐 C++
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器
317 9
【C++篇】深度剖析C++ STL:玩转 list 容器,解锁高效编程的秘密武器2
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
327 2
|
存储 设计模式 C++
【C++】优先级队列(容器适配器)
本文介绍了C++ STL中的线性容器及其适配器,包括栈、队列和优先队列的设计与实现。详细解析了`deque`的特点和存储结构,以及如何利用`deque`实现栈、队列和优先队列。通过自定义命名空间和类模板,展示了如何模拟实现这些容器适配器,重点讲解了优先队列的内部机制,如堆的构建与维护方法。
256 0
|
9月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1260 108
|
10月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
737 57
|
7月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
774 51
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !