首页 > 编程语言 >C++实现stack功能

C++实现stack功能

时间:2024-10-23 14:47:52浏览次数:8  
标签:std 功能 elements const C++ Stack push stack

C++代码实现stack功能,具体代码如下:

#include "stdafx.h"
#include <iostream>  
#include <vector>  
#include <stdexcept> // for std::out_of_range  
template <typename T>
class Stack {
private:
	std::vector<T> elements; // 底层容器,用于存储栈中的元素  
public:
	// 默认构造函数  
	Stack() = default;
	// 析构函数(虽然在这个例子中不是必需的,但良好的实践是总是定义它)  
	~Stack() = default;

	// 禁用拷贝构造函数和赋值运算符,以防止不必要的拷贝  
	Stack(const Stack&) = delete;
	Stack& operator=(const Stack&) = delete;

	// 检查栈是否为空  
	bool isEmpty() const {
		return elements.empty();
	}

	// 获取栈的大小  
	size_t size() const {
		return elements.size();
	}

	// 向栈顶添加元素  
	void push(const T& item) {
		elements.push_back(item);
	}

	// 从栈顶移除元素  
	void pop() {
		if (isEmpty()) {
			throw std::out_of_range("Stack<>::pop(): empty stack");
		}
		elements.pop_back();
	}

	// 获取栈顶元素的引用  
	T& top() {
		if (isEmpty()) {
			throw std::out_of_range("Stack<>::top(): empty stack");
		}
		return elements.back();
	}

	// 获取栈顶元素的const引用(用于不修改栈顶元素的情况)  
	const T& top() const {
		if (isEmpty()) {
			throw std::out_of_range("Stack<>::top() const: empty stack");
		}
		return elements.back();
	}
};

// 示例用法  
int main() {
	Stack<int> intStack;

	// 向栈中添加元素  
	intStack.push(10);
	intStack.push(20);
	intStack.push(30);

	// 输出栈顶元素  
	std::cout << "Top element: " << intStack.top() << std::endl;

	// 移除栈顶元素  
	intStack.pop();

	// 输出新的栈顶元素  
	std::cout << "Top element after pop: " << intStack.top() << std::endl;

	// 检查栈是否为空  
	std::cout << "Is stack empty? " << (intStack.isEmpty() ? "Yes" : "No") << std::endl;

	// 获取栈的大小  
	std::cout << "Stack size: " << intStack.size() << std::endl;

	getchar();
	return 0;
}

标签:std,功能,elements,const,C++,Stack,push,stack
From: https://blog.csdn.net/qq_38556796/article/details/143183493

相关文章

  • C++试题带答案
    阅读以下程序,回答问题1.试写出下列程序的输出结果与功能。 输出:2   sunny  24功能:求所有同学中年龄最大的同学2.试写出下列程序中函数fun()的功能及程序的输出结果。 函数fun()的功能:实现整数m的逆向输出程序的输出结果:543213.简述String类中Setc、Getc和Append三......
  • 一站式AI自动化剪辑 内置多种功能 永久免费
    AI影视解说自动化剪辑工具,功能非常强大,吊打所有视频解说,解放双手,从我开始【资源名称】:纳拉托艾【资源大小】:1.27【资源版本】:0.1【测试机型】:Win11.【资源介绍】:一站式AI影视解说,自动化剪辑,自动生成视频,自动进行解说,功能强大【下载链接】:https://pan.quark.cn/s/3aec2......
  • 腾讯地图web端请求报错113.该功能未授权
    问题描述:请求地址:https://apis.map.qq.com/jsapi?qt=geoc&addr=%2C%2C%2C&key=你的key&output=jsonp&pf=jsapi&ref=jsapi&cb=qq.maps._svcb3.geocoder0报错:qq.maps._svcb3.geocoder0&&qq.maps._svcb3.geocoder0({"status":113,"me......
  • c++计时器
    c++计时器鼠标版#include<bits/stdc++.h>#include<windows.h>#definekd(vk)(GetAsyncKeyState(vk)&0x8000?1:0)usingnamespacestd;#defineSHAKE30voidShakeWindow(){ RECTrect; HWNDhwnd=GetConsoleWindow(); GetWindowRect(hwnd,&rect);......
  • 6.824的MapReduce功能实现
    为了熟悉go语言,顺便了解一下MapReduce,花一个上午将go的调试功能配置好,下午将MIT的6.824课程的MapReduce功能实现了一遍,一次就把全部案例跑通过了,有点出乎意料的好。准备工作配置go的调试功能dlv,刚开始使用默认的modeauto,实际使用的是debug,无论怎样都成功不了。launch.json:......
  • Springboot集成阿里云短信实现短信发送功能(保姆级教程)
    Springboot集成阿里云短信实现短信发送功能概要Springboot集成阿里云短信实现短信发送功能涉及:pom引用,相关功能类,短信模板配置,demo方法等1,pom.xml<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.10.2......
  • Java实现积分中心功能(包含一周积分板,今天是否已签到,连续签到几天)
    Java实现积分中心功能(包含一周积分板,今天是否已签到,连续签到几天)概要Java实现积分中心功能1,积分中心—查询一周积分板(包括今天是否已签到,连续签到几天)根据当前的登录人查询一周计分板,要求根据连续签到天数不同,从今天开始展示每天不用的积分:【连续签到三天每日加1分,第......
  • Android开发教程二维码扫描功能
    Android开发教程二维码扫描功能二维码扫描大一点的app都有的功能,因为扫一下真的很方便一、思路:用zxing库二、效果图:看视频更加直观点:Android开发教程实战案例源码分享-二维码扫描功能三、关键代码:classFCaptureActivity:AppCompatActivity(),SurfaceHolder......
  • C++刷题tricks整理
    是自己做题中整理的常用C++操作,此为存档。STL容器容器适配器,STL里面的vector/array/deque/set/map/unordered_set可以直接使用==比较是否相等:vector<int>a;deque<int>a;map<int,string>a;unordered_map<int,string>a;set<int>a;unordered_set<int>a;forward_lis......
  • 马拉车算法(C/C++)
    #1024程序员节|征文#马拉车算法(Manacher'sAlgorithm)是一种用于在字符串中查找最长回文子串的线性时间复杂度算法。该算法由UdiManacher在1980年代提出,因此得名。它的核心思想是利用已知的回文信息来减少不必要的比较,从而提高效率。算法步骤预处理字符串:为了处理奇数......