当前位置:   article > 正文

【C++STL基础入门】stack栈的增删查等操作的使用_c++弹栈并返回删除元素

c++弹栈并返回删除元素

文章目录

  • 前言
  • 一、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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这里插入图片描述

输出:

Top element: 30
  • 1

二、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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

在这里插入图片描述

输出:

Stack size after push operations: 3
  • 1

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

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在这里插入图片描述

输出:

Stack size after pop operation: 2
  • 1

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

在这里插入图片描述

输出:

Stack 1 size: 2
Stack 2 size: 3
  • 1
  • 2

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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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

输出:

Stack size: 2
Top element: World!
  • 1
  • 2

总结

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

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

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

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

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

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

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

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/970385
推荐阅读
相关标签
  

闽ICP备14008679号