【C++】deque容器、stack容器&queue容器

目录

deque容器

deque容器的定义:

构造函数:

赋值操作:

大小获取操作:

删除和插入操作:

访问操作:

stack容器

基本概念:

stack容器的有关操作:

queue容器

基本概念:

queue容器的有关操作:


deque容器

deque容器的定义:

deque容器与vector容器类似,它可以看成一个数组,只不过vector容器的数组是一个单端的数组,只能进行尾部扩展添加;而deque容器是一个双端数组,它可以同时从两个方向向外扩展。

而因为vector容器只能向一个方向进行扩展,所以对其进行头端插入需要移动整个容器内的元素,这样的效率低,所以人们增加一个容器deque,它可以从头部进行向外扩展,这样可以提高头部插入的效率。

构造函数:

deque的构造函数与vector的类似,都是有一个默认构造,两个有参构造和一个拷贝构造;

	//默认构造
    deque<int>d1;
	//拷贝构造
    deque<int>d2(d1);
	//有参构造
    deque<int>d3(1,2);
	//有参构造
    deque<int>d4(d1.begin(), d1.end());

赋值操作:

deque的赋值操作与vector类似,都是等号赋值与assign函数的使用;

	deque<int> d1;
	d1.push_back(1);
	deque<int>d2;
	//等号赋值
    d2 = d1;
	//assign函数赋值,第一个是个数,第二个是元素
    d2.assign(10,2);
	print(d2);
	//assign赋值,第一个是要起始位置,第二个是结束位置下一位
    d2.assign(d1.begin(),d1.end());
	print(d2);

大小获取操作:

deque中的大小获取操作与vector中的类似,不过有一点不同,就是deque中没有容量的概念,因为它是一个两端开口的双向容器,所以它不存在容量。然后就只要获取大小size、判断是否非空empty和重新规划长度的reserve函数。它们的用法与vector中的类似。

    //判断是否为空
    if (!d1.empty())
	{
		cout << "Not,empty!" << endl;
	}
    //获取长度
	cout<<d1.size()<<endl;
	//重新规划长度
    d1.resize(10);
	print(d1);
	d1.resize(2);
	print(d1);

删除和插入操作:

在deque容器中,我们可以利用insert函数来进行插入,利用erase或者clear来进行删除。同时,我们还可以利用pop_back()、pop_front()、push_front()、push_back()来分别进行头删、尾删、头插、尾插。

	deque<int>d1;
	//尾插
    d1.push_back(1);
	d1.push_back(1);
	d1.push_back(1);
	deque<int>d2(d1);
    //尾删
	d1.pop_back();
    //头插
	d1.push_front(2);
	//头删
    d1.pop_front();
	//插入指定元素
    d1.insert(d1.begin(), 5);
	//插入n个指定元素m
    d1.insert(d1.begin(), 1, 6);
	//插入n~m范围内的数据
    d1.insert(d1.begin(),d2.begin(),d2.end());
	//删除指定位置的数据
    d1.erase(d1.begin());
	//删除指定区间数据
    d1.erase(d1.begin(), d1.end());
	//清空
    d1.clear();

访问操作:

对于deque数组中数据的访问操作也与vector容器类似,我们可以利用下标访问,利用[ ]符号或者at成员函数;当然,我们也可以利用frontback函数分别获取首尾两个数据。

	//访问头元素
    cout << d1.front() << endl;
	//访问尾元素
    cout<<d1.back()<<endl;
	//利用at访问
    cout << d1.at(2) << endl;
	//利用[]访问
    cout << d1[2] << endl;

stack容器

基本概念:

stack是一种栈容器,它的数据结构和前面的容器都不同,它支持先进后出,即先进去的元素会被压在栈底,然后后进的元素会压在它上面;最后要想拿到最低的元素,只能从上面一个个将元素拿出来。

因为栈的这种先进后出的特性,所以栈不支持遍历的操作;但支持求大小的操作,因为它可以在元素进来时就记录它的数量。

stack容器的有关操作:

stack容器的操作函数不算多,整合起来有:判断是为空、查看栈顶元素、移除栈顶元素、栈顶插入元素、查看栈的大小;而它的构造函数也只有默认和拷贝构造;赋值操作就是只有等号赋值操作。

	stack<int> sta;
	//栈顶插入
    sta.push(1);
	sta.push(2);
	//查看栈顶元素
    sta.top();
	cout << sta.top();
	//判断是否为空
    sta.empty();
	//移除栈顶元素
    sta.pop();
    //查看栈的大小
    cout<<sta.size();

queue容器

基本概念:

queue是一种队列容器,它的数据结构是队列,它符合先进先出、后进后出的原则。队列就像一条管道,一头进,一头出,所以队列只能拿到入口出的元素和出口处的元素并且队列不允许被遍历。队列是方有向和入口、出口的。数据进来的地方叫做队尾, 数据出去的地方叫做队头。

queue容器的有关操作:

queue容器的操作和stack容器的操作几乎一致,queue的构造函数也分为默认构造函数和拷贝构造函数。queue的赋值操作也是重载的等号赋值;对于queue的成员函数,主要分为:判断是否为空、查看队尾元素、查看队头元素、移除队头元素、队尾插入元素。

	queue<int>q;
	//队尾插入元素
    q.push(1);
	//判断是否为空
    q.empty();
	//查看队头元素
    cout << q.front() << endl;
	//查看队尾元素
    cout << q.back() << endl;
	//移除队头元素
    q.pop();
    //查看队列大小
    cout<<q.size(); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值