【C++STL基础入门】stack栈的增删查等操作的使用

文章目录

  • 前言
  • 一、stack元素访问
    • 1.1 元素访问之top
  • 二、stack修改
    • 2.1 stack修改之push()函数
    • 2.2 stack修改之pop()函数
    • 2.3 stack修改之swap()交换函数
    • 2.4 stack修改之emplace()在顶部原位构造元素
  • 总结


前言

在C++的标准模板库(STL)中,stack(栈)是一个容器适配器,它提供了一种后进先出(LIFO)的数据结构。栈是一种简单但常用的数据结构,它在很多场景中都有广泛的应用。本文将介绍stack的基本概念和常用操作,帮助初学者快速入门使用C++ STL中的stack。


一、stack元素访问

1.1 元素访问之top

原型:value_type& top()
功能:返回栈顶元素的引用,但不删除该元素。
参数:无。
返回值:返回栈顶元素的引用。
示例代码:

#include <iostream>
#include <stack>

int main() {
    std::stack<int> myStack;
    myStack.push(10);
    myStack.push(20);
    myStack.push(30);

    int topElement = myStack.top();
    std::cout << "Top element: " << topElement << std::endl;

    return 0;
}

在这里插入图片描述

输出:

Top element: 30

二、stack修改

2.1 stack修改之push()函数

原型:void push(const value_type& value)
功能:将元素压入栈顶。
参数:要压入栈顶的元素的值。
返回值:无。
示例代码:

#include <iostream>
#include <stack>

int main() {
    std::stack<int> myStack;

    myStack.push(10);
    myStack.push(20);
    myStack.push(30);

    std::cout << "Stack size after push operations: " << myStack.size() << std::endl;

    return 0;
}

在这里插入图片描述

输出:

Stack size after push operations: 3

函数用于将元素添加到容器的末尾。

2.2 stack修改之pop()函数

原型:void pop()
功能:弹出栈顶元素,即删除栈顶元素。
参数:无。
返回值:无。
示例代码:

#include <iostream>
#include <stack>

int main() {
    std::stack<int> myStack;
    myStack.push(10);
    myStack.push(20);
    myStack.push(30);

    myStack.pop();

    std::cout << "Stack size after pop operation: " << myStack.size() << std::endl;

    return 0;
}

在这里插入图片描述

输出:

Stack size after pop operation: 2

2.3 stack修改之swap()交换函数

原型:void swap(stack& other)
功能:交换两个栈的内容。
参数:另一个要交换的栈。
返回值:无。
示例代码:

#include <iostream>
#include <stack>

int main() {
    std::stack<int> stack1;
    stack1.push(10);
    stack1.push(20);
    stack1.push(30);

    std::stack<int> stack2;
    stack2.push(40);
    stack2.push(50);

    stack1.swap(stack2);

    std::cout << "Stack 1 size: " << stack1.size() << std::endl;
    std::cout << "Stack 2 size: " << stack2.size() << std::endl;

    return 0;
}

在这里插入图片描述

输出:

Stack 1 size: 2
Stack 2 size: 3

2.4 stack修改之emplace()在顶部原位构造元素

原型:template <class… Args> reference emplace(Args&&… args)
功能:在栈顶原位构造一个元素。
参数:要构造元素所需的参数。
返回值:对新构造元素的引用。
示例代码:

#include <iostream>
#include <stack>
#include <string>

int main() {
    std::stack<std::string> myStack;
    myStack.emplace("Hello");
    myStack.emplace("World!");

    std::cout << "Stack size: " << myStack.size() << std::endl;
    std::cout << "Top element: " << myStack.top() << std::endl;

    return 0;
}

在这里插入图片描述
它的目的是在容器中就地构造元素,而不是进行副本创建。

输出:

Stack size: 2
Top element: World!

总结

本文介绍了C++ STL中的stack栈的基本概念和常用操作。stack是一个容器适配器,提供了一种后进先出(LIFO)的数据结构,非常适用于需要快速访问最近添加的元素的场景。

通过使用头文件,我们可以轻松地创建一个栈对象,并通过一系列操作来管理栈中的元素。

首先,我们可以使用push(element)函数将元素添加到栈的顶部。这意味着新的元素成为了最顶部,而之前添加的元素则往下移动。

要从栈中移除栈顶元素,我们可以使用pop()函数。这会删除栈顶的元素,并使下面的元素成为新的栈顶。

通过使用top()函数,我们可以访问栈顶元素的值,而不会删除它。这对于需要查看栈顶元素但不改变栈的结构的情况非常有用。

我们还可以使用empty()函数来检查栈是否为空。如果栈为空,表示没有任何元素存在;如果栈不为空,意味着至少有一个元素存在。

要获取栈中元素的数量,我们可以使用size()函数。它返回栈中当前的元素数量,帮助我们了解栈的大小。

通过使用示例代码,我们演示了stack栈的基本操作。这个示例包括创建栈对象、添加元素、获取栈的大小、访问栈顶元素以及移除栈顶元素等操作。这有助于加深你对stack栈的理解并且可以用作参考。

通过学习本文中介绍的内容,你现在应该对C++ STL中的stack栈有了较详细的了解。你可以利用stack栈来实现后进先出的数据结构,并根据具体的需求进行相应的增删查等操作。

使用stack栈可以帮助我们更高效地管理数据,尤其在需要维护元素顺序并以最后添加的元素为主导的情况下,它是一个非常有用的工具。

希望本文对您学习C++ STL中的stack栈有所帮助。祝愉快学习!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C++标准函数库中80%是STL,其中广泛使用了泛性编程思想,在其中分为几大部分。 1:语言支持部分。 2:诊断部分。包含了异常处理,断言,错误代码三大方式。 3:通用工具部分。包括动态内存管理工具,日期/时间处理工具等。 4:字符串处理部分。 5:国际化部分。使用Locale和facet可以为程序提供多国际化支持,包括各种字符集,日期时间,数值货币处理的支持。 6:容器(containers)部分。STL重要部分,包含了许多数据结构,有vector(动态增加的数组),queue(队列),stack(堆)……甚至也包括string,它也可以看做为一种容器,并且适用所有的容器可用的方法。 7:算法(algorithms)部分。STL重要部分,包含了70多个通用算法,都是优化的效率很高的,用来控制各种容器,内建数组等。例如find可以用来在容器中找某特定值的元素,for_each可以用来将函数应用到容器元素之上,sort用于对容器中的元素排序。 8;迭代器(iterators)STL重要组成部分,每个容器都有自己的迭代器,只有容器才可以进行访问自己的元素,它类似指针,将算法和容器中的元素联系起来。 9:数值(numerics)部分。包含了一些数学运算的功能库,对复数运算提供了支持。 10:输入输出(I/O)部分。摸版化的IOStream部分。他提供了对C++程序的支持,并且对原有的iostream兼容。 所以,总体看来,C++标准函数库,包含的10大块内容中,STL主要包含了四个部分,迭代器,容器,算法。和额外的一个字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人才程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值