亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

C++ STL 中的堆栈示例

什么是 std::stack?

堆栈是一种基于 LIFO(后进先出)技术的数据结构。 std::stack 只允许从一端添加和删除元素。

std::stack 类是一个容器适配器。容器对象保存类似数据类型的数据。您可以从各种序列容器创建堆栈。如果没有提供容器,则默认使用双端队列容器。容器适配器不支持迭代器,因此不能用于操作数据。

在本 C++ 教程中,您将学习

堆栈语法

要创建堆栈,我们必须在代码中包含 头文件。然后我们使用这个语法来定义 std::stack:

template <class Type, class Container = deque<Type> > class stack;

成员类型

以下是堆栈成员类型:

堆栈中的操作

C++ 栈支持以下基本操作:

堆栈实现

步骤 1) 我们最初有一个空堆栈。空堆栈的顶部设置为 -1。

步骤 2) 接下来,我们将元素 5 压入堆栈。栈顶将指向元素 5。

步骤 3) 接下来,我们将元素 50 推入堆栈。栈顶移动并指向元素 50。

第 4 步) 然后我们执行了一个弹出操作,从堆栈中删除了顶部元素。元素 50 从堆栈中弹出。栈顶现在指向元素 5。

push() 和 pop()

stack::push() 函数将新项目添加到堆栈顶部。插入后堆栈大小增加 1。该函数采用以下语法:

stack.push(value)

该值是要插入堆栈的项目。

stack::pop() 函数删除栈顶元素。这是堆栈的最新项目。删除后堆栈大小减 1。下面是函数语法:

stack.pop()

该函数不接受任何参数。

示例 1:

#include <iostream> 
#include <stack> 
using namespace std;
int main() {
	stack<int> st;
	st.push(10);
	st.push(20);
	st.push(30);
	st.push(40);
	
         st.pop();
	st.pop();

	while (!st.empty()) {
		cout << ' ' << st.top();
		st.pop();
	}
}

输出:

下面是代码截图:

代码说明:

  1. 在我们的代码中包含 iostream 头文件以使用其功能。
  2. 在我们的代码中包含堆栈头文件以使用其功能。
  3. 在我们的代码中包含 std 命名空间以使用它的类而不调用它。
  4. 调用 main() 函数。应在此函数中添加程序逻辑。
  5. 创建一个堆栈 st 来存储整数值。
  6. 使用 push() 函数将值 10 插入堆栈。
  7. 使用 push() 函数将值 20 插入堆栈。
  8. 使用 push() 函数将值 30 插入堆栈。
  9. 使用 push() 函数将值 40 插入堆栈。
  10. 使用pop()函数将栈顶元素移除,即40。现在栈顶元素变为30。
  11. 使用pop()函数将栈顶元素移出栈顶,即30。现在栈顶元素变为20。
  12. 使用 while 循环和 empty() 函数检查堆栈是否为空。这 !是 NOT 运算符。
  13. 在控制台上打印堆栈的当前内容。
  14. 调用栈上的pop() 函数。
  15. while 循环主体的结尾。
  16. main() 函数体结束。

空(),大小(),顶部()

堆栈具有内置函数,您可以使用这些函数来处理堆栈及其值。其中包括:

示例 2:

#include <iostream> 
#include <stack>  
using namespace std;
void createStack(stack <int> mystack)
{
	stack <int> ms = mystack;
	while (!ms.empty())
	{
		cout << '\t' << ms.top();
		ms.pop();
	}
	cout << '\n';
}
int main()
{
	stack <int> st;
	st.push(32);
	st.push(21);
	st.push(39);
	st.push(89);
	st.push(25);

	cout << "The stack st is: ";
	createStack(st);
	cout << "\n st.size() : " << st.size();
	cout << "\n st.top() : " << st.top();
	cout << "\n st.pop() : ";
	st.pop();
	createStack(st);
	return 0;
}

输出:

下面是代码截图:

代码说明:

  1. 在我们的代码中包含 iostream 头文件以便使用它的功能。
  2. 在我们的代码中包含堆栈头文件以便使用它的功能。
  3. 在我们的程序中包含 std 命名空间,以便在不调用它的情况下使用它的类。
  4. 创建函数createStack,我们可以使用它来创建堆栈mystack。堆栈将保存一组整数。
  5. createStack 函数体的开头。
  6. 创建 mystack 数据类型的实例并将其命名为 ms。
  7. 使用 while 循环和 empty() 函数检查堆栈是否为空。
  8. while 循环体的开始。
  9. 使用存储在栈顶的 top() 函数。 \t 字符将创建一个新选项卡。
  10. 使用 pop() 函数删除栈顶元素。
  11. while 循环主体的结尾。
  12. 在控制台上打印一个空行。
  13. createStack 函数主体的结尾。
  14. 调用 main() 函数。程序逻辑应添加到 main() 函数的主体中。
  15. main() 函数体的开始。
  16. 创建一个堆栈对象 st。
  17. 使用 push() 函数将元素 32 插入堆栈。
  18. 使用 push() 函数将元素 21 插入堆栈。
  19. 使用 push() 函数将元素 39 插入堆栈。
  20. 使用 push() 函数将元素 89 插入堆栈。
  21. 使用 push() 函数将元素 25 插入堆栈。
  22. 在控制台上打印一些文本。
  23. 调用createStack函数执行上述插入操作入栈。
  24. 在控制台上与其他文本一起打印堆栈的大小。
  25. 在控制台上打印堆栈顶部的元素。
  26. 在控制台上打印一些文本。
  27. 删除堆栈顶部的元素。然后它将返回堆栈中剩余的元素。
  28. 调用createStack函数执行上述操作。
  29. 程序必须在成功完成后返回值。
  30. main() 函数体结束。

emplace() 和 swap()

这些是其他内置的堆栈函数:

示例 3:

#include <iostream>    
#include <stack>
#include <cstdlib>
using namespace std;
int main() {
	stack<int> st1;
	stack<int> st2;

	st1.emplace(12);
	st1.emplace(19);

	st2.emplace(20);
	st2.emplace(23);

	st1.swap(st2);

	cout << "st1 = ";
	while (!st1.empty()) {
		cout << st1.top() << " ";
		st1.pop();
	}

	cout << endl << "st2 = ";
	while (!st2.empty()) {
		cout << st2.top() << " ";
		st2.pop();
	}
}

输出:

下面是代码截图:

代码说明:

  1. 在我们的代码中包含 iostream 头文件以使用其功能。
  2. 在我们的代码中包含堆栈头文件以使用其功能。
  3. 在我们的代码中包含 cstdlib 头文件以使用其功能。
  4. 在我们的代码中包含 std 命名空间以使用它的类而不调用它。
  5. 调用 main() 函数。程序逻辑将添加到此函数的主体中。
  6. 声明一个名为 st1 的堆栈来存储整数值。
  7. 声明一个名为 st2 的堆栈来存储整数值。
  8. 使用 emplace() 函数将整数 12 插入名为 st1 的堆栈中。
  9. 使用 emplace() 函数将整数 19 插入名为 st1 的堆栈中。
  10. 使用 emplace() 函数将整数 20 插入名为 st2 的堆栈中。
  11. 使用 emplace() 函数将整数 23 插入名为 st2 的堆栈中。
  12. 使用 swap() 函数交换两个堆栈 st1 和 st2 的内容。堆栈 st1 的内容应该移动到堆栈 st2。堆栈 st2 的内容应移动到堆栈 st1。
  13. 在控制台上打印一些文本。
  14. 使用while语句和empty()函数检查堆栈st1是否为空。
  15. 在控制台上打印堆栈 st1 的内容。当在控制台上打印堆栈元素时,“”会在堆栈元素之间添加空间。
  16. 在栈 st1 上执行 pop() 函数来移除顶部元素。
  17. while 语句主体的结尾。
  18. 在控制台上打印一些文本。 endl 是结束行的 C++ 关键字。它将鼠标光标移动到下一行以从那里开始打印。
  19. 使用while语句和empty()函数检查堆栈st2是否不为空。
  20. 在控制台上打印堆栈 st2 的内容。当在控制台上打印堆栈元素时,“”会在堆栈元素之间添加空间。
  21. 在栈 st2 上执行 pop() 函数以移除顶部元素。
  22. while 语句主体的结尾。
  23. main() 函数体的结尾。

STL 中的堆栈

STL(标准模板库)带有提供通用 C++ 数据结构的模板类。因此,堆栈也可以在 STL 中实现。我们只需将这个库包含在我们的代码中并使用它来定义一个堆栈。

stack<T> st; 

上面的语法为数据类型 T 的元素声明了一个栈 st。

示例 3:

#include <iostream>      
#include <stack>
#include <cstdlib>
using namespace std;
int main() {
	stack<int> st;
	st.push(12);
	st.push(19);
	st.push(20);
	cout << st.top();   
	cout << st.size();  
}

输出:

下面是代码截图:

代码说明:

  1. 在我们的代码中包含 iostream 头文件以使用其功能。
  2. 在我们的代码中包含堆栈头文件以使用其功能。
  3. 在我们的代码中包含 cstdlib 头文件以使用其功能。
  4. 在我们的代码中包含 std 命名空间以使用它的类而不调用它。
  5. 调用 main() 函数。程序逻辑应添加到此函数的主体中。
  6. 声明一个堆栈 st 来存储整数数据。
  7. 将元素 12 添加到堆栈中。
  8. 将元素 19 添加到堆栈中。
  9. 将元素 20 添加到堆栈中。
  10. 在控制台上打印堆栈顶部的元素。
  11. 在控制台上打印堆栈的大小。
  12. 函数 main() 的主体结束。

总结:


C语言

  1. C++ 中的运算符示例:什么是、类型和程序
  2. C++ do...while 循环与示例
  3. 带有示例的 C++ Switch Case 语句
  4. C++ 动态分配数组的例子
  5. 带有示例的 C++ 指针
  6. 带有示例的 C++ 运算符重载
  7. C++ 结构与示例
  8. 带有打印示例的 C++ 标准模板库 (STL) 中的映射
  9. C++ 中的 std::list 示例
  10. 带有程序示例的 C++ 函数
  11. 结构和类的区别:用 C++ 示例解释
  12. 集合中的 Python 计数器示例