21xrx.com
2024-11-08 22:32:33 Friday
登录
文章检索 我的文章 写文章
C++ 栈容器简介和使用方法详解
2023-07-05 09:24:15 深夜i     --     --
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() 函数来交换这两个栈容器中的元素。最后,我们分别遍历这两个栈容器,并将它们的元素打印出来。

  
  

评论区

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