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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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代理 了,记录一下