概述
C++ deque类使用详解
- 定义
- 基本操作
- 结构体队列赋值
- 参考链接
定义
deque(双端队列)是由一段一段的定量连续空间构成,可以向两端发展,因此不论在尾部或头部安插元素都十分迅速。 在中间部分安插元素则比较费时,因为必须移动其它元素。
使用之前必须加相应容器的头文件:
#include <deque> // deque属于std命名域的,因此需要通过命名限定,例如using std::deque;
定义的实现代码如下:
deque<int> a; // 定义一个int类型的双端队列a
deque<int> a(10); // 定义一个int类型的双端队列a,并设置初始大小为10
deque<int> a(10, 1); // 定义一个int类型的双端队列a,并设置初始大小为10且初始值都为1
deque<int> b(a); // 定义并用双端队列a初始化双端队列b
deque<int> b(a.begin(), a.begin()+3); // 将双端队列a中从第0个到第2个(共3个)作为双端队列b的初始值
除此之外,还可以直接使用数组来初始化向量:
int n[] = { 1, 2, 3, 4, 5 };
// 将数组n的前5个元素作为双端队列a的初值
// 说明:当然不包括arr[4]元素,末尾指针都是指结束元素的下一个元素,
// 这个主要是为了和deque.end()指针统一。
deque<int> a(n, n + 5);
deque<int> a(&n[1], &n[4]); // 将n[1]、n[2]、n[3]作为双端队列a的初值
基本操作
容量函数:
#include <iostream>
#include <deque>
using namespace std;
int main(int argc, char* argv[])
{
deque<int> deq;
for (int i = 0; i<6; i++)
{
deq.push_back(i);
}
cout << deq.size() << endl; // 输出:6
cout << deq.max_size() << endl; // 输出:1073741823
deq.resize(0); // 更改元素大小
cout << deq.size() << endl; // 输出:0
if (deq.empty())
cout << "元素为空" << endl; // 输出:元素为空
return 0;
}
添加函数:
#include <iostream>
#include <deque>
using namespace std;
int main(int argc, char* argv[])
{
deque<int> deq;
// 头部增加元素
deq.push_front(4);
// 末尾添加元素
deq.push_back(5);
// 任意位置插入一个元素
deque<int>::iterator it = deq.begin();
deq.insert(it, 2);
// 任意位置插入n个相同元素
it = deq.begin(); // 必须要有这句
deq.insert(it, 3, 9);
// 插入另一个向量的[forst,last]间的数据
deque<int> deq2(5,8);
it = deq.begin(); // 必须要有这句
deq.insert(it, deq2.end() - 1, deq2.end());
// 遍历显示
for (it = deq.begin(); it != deq.end(); it++)
cout << *it << " "; // 输出:8 9 9 9 2 4 5
cout << endl;
return 0;
}
删除元素:
#include <iostream>
#include <deque>
using namespace std;
int main(int argc, char* argv[])
{
deque<int> deq;
for (int i = 0; i < 8; i++)
deq.push_back(i);
// 头部删除元素
deq.pop_front();
// 末尾删除元素
deq.pop_back();
// 任意位置删除一个元素
deque<int>::iterator it = deq.begin();
deq.erase(it);
// 删除[first,last]之间的元素
deq.erase(deq.begin(), deq.begin()+1);
// 遍历显示
for (it = deq.begin(); it != deq.end(); it++)
cout << *it << " ";
cout << endl;
// 清空所有元素
deq.clear();
// 遍历显示
for (it = deq.begin(); it != deq.end(); it++)
cout << *it << " "; // 输出:3 4 5 6
cout << endl;
return 0;
}
访问元素:
#include <iostream>
#include <deque>
using namespace std;
int main(int argc, char* argv[])
{
deque<int> deq;
for (int i = 0; i < 6; i++)
deq.push_back(i);
// 下标访问
cout << deq[0] << endl; // 输出:0
// at方法访问
cout << deq.at(0) << endl; // 输出:0
// 访问第一个元素
cout << deq.front() << endl; // 输出:0
// 访问最后一个元素
cout << deq.back() << endl; // 输出:5
return 0;
}
结构体队列赋值
#include <queue>
#include <iostream>
struct MyStruct
{
int num;
};
int main()
{
// 定义双端队列
std::deque<MyStruct> q;
MyStruct s1;
s1.num = 1;
// 插入队尾
q.push_back(s1);
MyStruct s2;
s2.num = 5;
// 插入队首
q.push_front(s2);
// 取出队首元素
MyStruct s2_copy = q.front();
MyStruct s1_copy = q.back();
std::cout << "s2 = " <<s2_copy.num << std::endl;
std::cout << "s1 = " << s1_copy.num << std::endl;
// 队首元素从队列中移除
q.pop_front();
// 队尾元素从队列中移除
q.pop_back();
// 判断队列是否为空
if (q.empty())
{
std::cout << "Enpty" << std::endl;
}
return 0;
}
参考链接
C++ STL deque使用详解
c++如何定义一个结构体队列
最后
以上就是俊逸苗条为你收集整理的C++ deque类使用详解的全部内容,希望文章能够帮你解决C++ deque类使用详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复