deque操作指南

复制代码
#include <iostream>
using namespace std;
#include <deque>
#include <algorithm>
void printDeque(const deque<int>& d)
{
    for (auto it = d.begin(); it != d.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}

//一、构造函数
/*
deque<T> deqT;                     默认构造形式
deque(beg, end);                   构造函数将[beg,end)区间中的元素拷贝给本身
deque(n, elem);                    构造函数将n个elem拷贝给本身
deque(const deque & deq);          拷贝构造函数
*/
void test1()
{
    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, 100);
    printDeque(d3);

    deque<int> d4(d3);
    printDeque(d4);
}


//二、赋值操作
/*
给deque容器进行赋值
deque& operator=(const deque & deq);              重载等号操作符
assign(beg, end);                                 将[beg, end)区间中的数据拷贝赋值给本身
assign(n, elem);                                  将n个elem拷贝赋值给本身
*/
void test2()
{
    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(d1.begin(), d1.end());
    printDeque(d3);

    deque<int> d4;
    d4.assign(10, 100);
    printDeque(d4);
}

//三、大小操作
/*
empty();                                   判断容器是否为空
size();                                    返回容器中元素的个数
resize(int num);                           重新指定容器的长度为num,若容器变长,则以默认值填充新位置
                                           若容器变短,则末尾超出容器长度的元素被删除
resize(int num, elem);                     重新指定容器的长度为num,若容器变长,则以elem值填充新位置
                                           若容器变短,则末尾超出容器长度的元素被删除
*/
void test3()
{
    deque<int> d1;
    for (int i = 0; i < 10; i++)
    {
        d1.push_back(i);
    }
    printDeque(d1);

    if (d1.empty())
    {
        cout << "" << endl;
    }

    int size = d1.size();
    cout << "大小:" << size << endl;

    d1.resize(15);
    printDeque(d1);

    d1.resize(20, 20);
    printDeque(d1);
}

//四、插入和删除
/*
两端插入操作:
push_back(elem);                            在容器尾部添加一个数据
push_front(elem);                           在容器头部插入一个数据
pop_back();                                 删除容器最后一个数据
pop_front();                                删除容器第一个数据
指定位置操作:
insert(pos, elem);                          在pos位置插入一个elem元素的拷贝,返回新数据的位置
insert(pos, n, elem);                       在pos位置插入n个elem数据,无返回值
insert(pos, beg, end);                      在pos位置插入[beg, end)区间的数据,无返回值
clear();                                    清空容器的所有数据
erase(beg, end);                            删除[beg, end)区间的数据,返回下一个数据的位置
erase(pos);                                 删除pos位置的数据,返回下一个数据的位置
注意:插入和删除提供的位置是迭代器
*/
void test4()
{
    cout << "sec1:" << endl;
    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);

    //尾删
    d1.pop_back(); //200 100 10

    //头删
    d1.pop_front(); // 100 10

    ///---------------sec2----------------------------///
    cout << "sec2:" << endl;
    deque<int> d2;
    //尾插
    d2.push_back(10);
    d2.push_back(20);

    //头插
    d2.push_front(100);
    d2.push_front(200);
    //200 100 10 20
    printDeque(d2);

    d2.insert(d2.begin(), 1000);
    printDeque(d2);

    d2.insert(d2.begin(), 2, 10000);
    printDeque(d2);

    deque<int> d3;
    //尾插
    d3.push_back(1);
    d3.push_back(2);
    d3.push_back(3);
    d2.insert(d2.begin(), d3.begin(), d3.end());
    printDeque(d2);

    ///------------------sec3-------------------------///
    cout << "sec3:" << endl;
    deque<int> d4;
    //尾插
    d4.push_back(10);
    d4.push_back(20);

    //头插
    d4.push_front(100);
    d4.push_front(200);

    //200 100 10 20
    printDeque(d4);
    deque<int>::iterator it = d4.begin();
    it++;
    d4.erase(it); // 200 10 20
    printDeque(d4);

    d4.erase(d4.begin(), d4.end());
    d4.clear();
    printDeque(d4);
}

//五、数据存取
/*
at(int idx);                            返回索引idx所指的数据
operator[];                             返回索引idx所指的数据
front();                                返回容器中第一个数据元素
back();                                 返回容器中最后一个数据元素
*/
void test5()
{
    deque<int> d1;
    for (int i = 0; i < 10; i++)
    {
        d1.push_back(i);
    }
    for (int i = 0; i < d1.size(); i++)
    {
        cout << d1[i] << " ";
    }
    cout << endl;

    for (int i = 0; i < d1.size(); i++)
    {
        cout << d1.at(i) << " ";
    }
    cout << endl;

    int front = d1.front();
    int back = d1.back();
    cout << front << back << endl;
}


//六、排序操作
/*
利用算法实现对deque容器进行排序
sort(iterator beg, iterator end)     对beg和end区间内元素进行排序
*/
void test6()
{
    deque<int> d1;
    for (int i = 0; i < 10; i++)
    {
        d1.push_back(i);
    }
    sort(d1.begin(), d1.end());//默认输出升序结果
    printDeque(d1);
}

int main_deque()
{
    test6();
    return 0;
}
复制代码

 

 

posted @   花与不易  阅读(100)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示