C++ Stack::swap() 函数



C++ 函数std::stack::swap()交换两个栈的所有元素。为了使用此函数,两个栈的数据类型必须相同,但大小可以不同(如有必要可以修改)。

swap() 函数是用于处理 C++ 中栈数据结构的简单而高效的工具。它可以用于反转栈中元素的顺序、清除栈的内容以及对栈中的元素进行排序。

语法

以下是 std::stack::swap() 函数的语法:

void swap (stack& x) noexcept;

参数

x - 另一个相同类型的栈对象。

返回值

此方法没有返回值。

示例 1

以下示例演示了使用不同大小的 std::stack::swap() 函数。

首先,我们创建了两个栈 's1' 和 's2'。然后,我们使用 push() 函数将值 '1 - 6' 插入 's1',并将值 '101 - 103' 插入 's2'。之后,我们使用 swap() 函数交换 's1' 和 's2' 的元素。最后,我们使用 top() 和 pop() 函数检索并移除两个栈中的元素。

#include <iostream>
#include <stack>
using namespace std;

int main(void) {
   stack<int> s1;
   stack<int> s2;
   for (int i = 0; i < 5; ++i)
      s1.push(i + 1);
   for (int i = 0; i < 3; ++i)
      s2.push(100 + i);
   s1.swap(s2);
   cout << "Contents of stack s1 after swap operation" << endl;
   while (!s1.empty()) {
      cout << s1.top() << endl;
      s1.pop();
   }
   cout << endl;
   cout << "Contents of stack s2 after swap operation" << endl;
   while (!s2.empty()) {
      cout << s2.top() << endl;
      s2.pop();
   }
   return 0;
}

输出

让我们编译并运行上述程序,这将产生以下结果:

Contents of stack s1 after swap operation
102
101
100
Contents of stack s2 after swap operation
5
4
3
2
1

示例 2

现在我们尝试交换大小相同的两个栈 'stack1' 和 'stack2':

#include <iostream>
#include <stack>

int main() {
   std::stack<int> stack1;
   std::stack<int> stack2;
   stack1.push(1);
   stack1.push(2);
   stack1.push(3);

   stack2.push(4);
   stack2.push(5);
   stack2.push(6);
   // Swap the two stacks
   stack1.swap(stack2);
   std::cout << "Stack 1 after swap:" << std::endl;
   while (!stack1.empty()) {
      std::cout << stack1.top() << std::endl;
      stack1.pop();
   }
   std::cout << "Stack 2 after swap:" << std::endl;
   while (!stack2.empty()) {
      std::cout << stack2.top() << std::endl;
      stack2.pop();
   }
   return 0;
}

输出

上述代码的输出如下:

Stack 1 after swap:
6
5
4
Stack 2 after swap:
3
2
1

示例 3

在这里,我们使用 char 数据类型上的 swap() 函数来交换两个栈 's1' 和 's2' 的元素:

#include <iostream>
#include <stack>
using namespace std;

int main(void) {
   stack<char> s1;
   stack<char> s2;
   s1.push('c');
   s1.push('a');
   s1.push('r');
   s2.push('b');
   s2.push('i');
   s2.push('k');
   s2.push('e');
   s1.swap(s2);
   cout << "Contents of stack s1 after swap operation" << endl;
   while (!s1.empty()) {
      cout << s1.top() << endl;
      s1.pop();
   }
   cout << endl;
   cout << "Contents of stack s2 after swap operation" << endl;
   while (!s2.empty()) {
      cout << s2.top() << endl;
      s2.pop();
   }
   return 0;
}

输出

如果我们运行上述代码,它将生成以下输出:

Contents of stack s1 after swap operation
e
k
i
b

Contents of stack s2 after swap operation
r
a
c

示例 4

现在,我们尝试将包含 2 个元素的栈 'stack1' 与空栈 'stack2' 交换:

#include <iostream>
#include <stack>
using namespace std;

int main(void) {
   stack<int> stack1;
   stack<int> stack2;
   stack1.push(1);
   stack1.push(2);
   stack1.swap(stack2);
   cout << "Contents of stack1 after swap operation:" << endl;
   while (!stack1.empty()) {
      cout << stack1.top() << endl;
      stack1.pop();
   }
   cout << endl;
   cout << "Contents of stack2 after swap operation:" << endl;
   while (!stack2.empty()) {
      cout << stack2.top() << endl;
      stack2.pop();
   }
   return 0;
}

输出

以下是上述代码的输出:

Contents of stack1 after swap operation:

Contents of stack2 after swap operation:
2
1
广告