21xrx.com
2025-03-29 09:30:44 Saturday
文章检索 我的文章 写文章
C++ 栈容器简介和使用方法详解
2023-07-05 09:24:15 深夜i     9     0
C++ 栈容器 简介 使用方法 详解

C++ 中的容器是一种非常重要的数据结构,它提供了一种方便、快速和灵活的方法来处理数据。其中,栈容器就是一种常见的容器类型,它按照“后进先出”的原则存储数据。本文将详细介绍 C++ 栈容器的使用方法和功能。

一、C++ 栈容器的定义和基本功能

C++ 栈容器是一种模板类,可以使用标准库中的头文件 来引入。基本定义如下:

std::stack<data_type> stack_name;

其中 data_type 表示存储在栈中的数据类型,如 int、string、char 等等。stack_name 则表示栈的名称。

C++ 栈容器的主要功能包括:

1. push():将元素压入栈中。

2. pop():将栈顶元素弹出栈。

3. top():返回栈顶元素。

4. empty():判断栈是否为空。

5. size():返回栈中元素的个数。

二、栈容器的使用示例

下面举一个例子,展示如何使用 C++ 栈容器。

#include <iostream>
#include <stack>
using namespace std;
int main() {
  stack<int> my_stack;
  my_stack.push(10);   // 压入元素 10
  my_stack.push(20);   // 压入元素 20
  my_stack.push(30);   // 压入元素 30
  cout << "栈中元素个数:" << my_stack.size() << endl;
  while (!my_stack.empty()) {
    cout << "栈顶元素:" << my_stack.top() << endl;
    my_stack.pop();    // 弹出栈顶元素
  }
  return 0;
}

运行结果如下:

栈中元素个数:3
栈顶元素:30
栈顶元素:20
栈顶元素:10

在上面的代码中,我们首先创建一个名为 my_stack 的 int 类型栈。然后我们使用 push() 函数将三个数字压入栈中。接着,我们使用 size() 函数来获取栈中元素的个数。最后,我们使用一个 while 循环遍历整个栈,将栈顶元素打印出来,并使用 pop() 函数将其从栈中弹出。

三、C++ 栈容器的高级用法

除了基本的功能以外,C++ 栈容器还提供了一些高级用法,例如:

1. 自定义比较规则:

默认情况下,栈容器按照元素插入顺序来存储数据。但是,如果需要按照其他规则来排序,可以通过重载运算符来实现。

struct MyCompare {
  bool operator() (int a, int b)
    return a > b;  // 按照降序排列
  
};
int main() {
  stack<int, vector<int>, MyCompare> my_stack;
  my_stack.push(10);
  my_stack.push(20);
  my_stack.push(30);
  while (!my_stack.empty()) {
    cout << "栈顶元素:" << my_stack.top() << endl;
    my_stack.pop();
  }
  return 0;
}

运行结果如下:

栈顶元素:30
栈顶元素:20
栈顶元素:10

在上面的代码中,我们定义了一个名为 MyCompare 的结构体,并在其中重载了 () 运算符。该运算符返回值为 bool 类型,表示两个元素的比较结果。然后,我们用 MyCompare 作为第三个参数来创建一个栈对象。这样,我们就可以按照重载运算符中定义的规则来排序了。

2. 使用迭代器遍历栈:

既然栈容器是一种数据结构,就一定可以使用迭代器来遍历它。下面是一个示例代码:

int main() {
  stack<int> my_stack;
  my_stack.push(10);
  my_stack.push(20);
  my_stack.push(30);
  for (auto it = my_stack.cbegin(); it != my_stack.cend(); ++it) {
    cout << *it << endl;
  }
  return 0;
}

运行结果如下:

30
20
10

在上面的代码中,我们使用 cbegin() 和 cend() 函数来获取栈容器的起始和终止迭代器。然后,我们使用 for 循环遍历整个容器,并使用 *it 来获取每个元素的值。

3. 与其他容器进行结合:

C++ 标准库中的其他容器也可以与栈容器进行结合,实现更加复杂的数据结构。下面是一个示例代码:

int main() {
  stack<int> my_stack1;
  stack<int> my_stack2;
  my_stack1.push(10);
  my_stack1.push(20);
  my_stack2.push(30);
  my_stack2.push(40);
  my_stack1.swap(my_stack2);  // 交换两个栈容器中的元素
  cout << "my_stack1:";
  while (!my_stack1.empty()) {
    cout << my_stack1.top() << " ";
    my_stack1.pop();
  }
  cout << endl;
  cout << "my_stack2:";
  while (!my_stack2.empty()) {
    cout << my_stack2.top() << " ";
    my_stack2.pop();
  }
  return 0;
}

运行结果如下:

my_stack1:40 30
my_stack2:20 10

在上面的代码中,我们首先创建了两个栈容器 my_stack1 和 my_stack2,并向其中添加了不同的元素。然后,我们使用 swap() 函数来交换这两个栈容器中的元素。最后,我们分别遍历这两个栈容器,并将它们的元素打印出来。

  
  

评论区