holyya.com
2025-09-04 18:41:31 Thursday
登录
文章检索 我的文章 写文章
C++ 栈函数
2023-07-05 09:40:57 深夜i     --     --
C++ 函数

在 C++ 中,栈是一种数据结构,它遵循后进先出(LIFO)的原则。栈可以在程序中使用,以便在需要时保存和检索数据。C++ 标准库提供了多个栈函数和类,可以对栈进行各种操作。

1. 栈类

C++中的 stack 类是一种容器适配器,其基础是 STL 中的容器类 vector、deque 和 list。它使用 vector 作为默认基础容器,并由该类提供所有方法。

以下是 stack 类的构造函数:

- stack(); // 创建一个空的栈

- stack(const stack& rhs); // 复制构造函数

- void swap(stack& rhs); // 交换两个栈

- bool empty(); // 判断栈是否为空

- void pop(); // 移除栈顶元素

- size_t size(); // 返回栈的大小

- T& top(); // 返回栈顶元素

- void push(const T& val); // 插入元素到栈顶

实际上,在实际编程过程中,大多数情况下不需要自己设计一个栈,而是使用 vector、deque 和 list 类的适配器 stack 类。

2. deque 类

deque 属于双向队列容器,可以在两端插入和删除元素,堆栈属于典型的双向队列,因此可以使用 deque 类来构造栈。

deque 栈实现和 vector 栈类似,可以通过 push、pop、top 和 empty函数来实现栈的基本操作。使用 deque 的好处是在栈空间不够时,deque 能够自动增加栈空间大小。

deque 栈的使用如下:


#include <iostream>

#include <deque>

using namespace std;

int main()

{

  // 创建deque 栈

  deque<int> stack;

  // push 入栈

  stack.push_back(1);

  stack.push_back(2);

  // top 读取栈顶元素

  cout << stack.back() << endl; // 2

  // pop 弹出栈顶元素

  stack.pop_back();

  // empty 判断是否为空

  if (stack.empty())

    cout << "empty!" << endl;

  else

    cout << "not empty!" << endl;

  return 0;

}

3. vector 类

使用 vector 类实现栈需要自己设计栈的函数。对于常见的 push、pop、empty 和 top 函数,我们可以借鉴 deque 和 stack 函数的实现方式。

vector 栈的代码如下:


#include <iostream>

#include <vector>

using namespace std;

template <typename T>

class Stack {

public:

  // push 入栈

  void push(T item)

  {

    vec.push_back(item);

  }

  // pop 弹出栈顶元素

  void pop()

  {

    vec.pop_back();

  }

  // top 读取栈顶元素

  T& top()

  {

    return vec.back();

  }

  // empty 判断是否为空

  bool empty()

  {

    return vec.empty();

  }

private:

  vector<T> vec;

};

int main()

{

  // 创建vector栈

  Stack<int> stack;

  // push 入栈

  stack.push(1);

  stack.push(2);

  // top 读取栈顶元素

  cout << stack.top() << endl; // 2

  // pop 弹出栈顶元素

  stack.pop();

  // empty 判断是否为空

  if (stack.empty())

    cout << "empty!" << endl;

  else

    cout << "not empty!" << endl;

  return 0;

}

总结

以上介绍了使用 deque 和 vector 实现栈的方法,同时也提供了 stack 类的介绍。使用 stack 类能够在避免自己设计栈时,提供完善的基础函数。而在需要特殊功能时,可以通过 deque 和 vector 自定义实现栈。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复