c++ - 如何在函数中返回泛型值
问题描述
我正在尝试STACK
使用vector
whereSTACK
可以是类型int
等double
来实现string
泛型
我正面临着pop
方法问题,我应该返回一个类型为 的值Object
。如果 stack 是空的,我显然会返回,如果是 type -1
,这将不起作用。有没有办法可以处理这种情况?STACK
string
#include <bits/stdc++.h>
using namespace std;
template <typename Object>
class Stack{
private:
int top;
int maxSize;
vector<Object> object;
public:
explicit Stack(const int size) : maxSize{size}, top{-1} {
object.reserve(maxSize);
}
Object pop(){
Object val = -1;
if(top == -1){
cout << "Stack Underflow" << endl;
return val;
} else{
val = object[top];
// object.erase(object.begin() + top);
// object[top] = 0;
--top;
return val;
}
}
};
编辑:
这里有什么更好的选择?从评论看来,返回 -1 显然是不可行的。我怎样才能使它成为通用的空堆栈将返回一个通用的值?
解决方案
我怎样才能使它成为通用的空堆栈将返回一个通用的值?
据我所知:不,你不能,至少在你描述的堆栈设计中不能pop()
总是返回一个值,Object
并且它也必须是所有类型的通用值。那是因为没有可以将所有类型设置为的通用魔法值。
pop()
您只有一些选择:如果您的堆栈为空,则抛出异常,例如
#include <stdexcept>
...
Object pop(){
if(top == -1){
throw std::out_of_range("pop:: Stack is empty");
pop
或更改返回类似 astd::optional
或的签名std::variant
。
推荐阅读
- django - 使用 ajax 发送 POST 请求时出现 403 错误(csrf 令牌集)
- c++ - 如何将字符符号“+”直接转换为操作+(加法)?C++
- javascript - 使用以前的信息重定向到另一个页面 - JS
- javascript - 根据一天中的时间添加或更改元素类别
- slack-api - Slack Connect users.info 缺少电子邮件
- javascript - 如何等待功能完成?
- python - detectObjectsFromImage 方法的问题
- javascript - 我想使用链接中的参数向网页添加倒计时
- x11 - 运行 Linux GUI 应用程序 vis WSL2
- ios - 如何在 iOS 设备上以编程方式快速显示 UIImageView 后面的彩色磁盘