首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当栈为空时,在(模板化的)栈弹出方法中做什么?

当栈为空时,在(模板化的)栈弹出方法中做什么?
EN

Stack Overflow用户
提问于 2018-06-03 01:25:16
回答 2查看 210关注 0票数 0

我已经写了一个模板化的容器类,它接受模板参数的类型和模板。

代码语言:javascript
复制
template<class type, template<typename...> class Seq>
class stack1
{
private:
    int count;
    int size;
    Seq<type> st;
    //Seq<string> str;

public:
    stack1(size_t size):size(100), count(-1){ }
    void push(type elem);
    type pop();

};


template<class type, template<typename...> class Seq>
type stack1<type, Seq>::pop()
{
    if (count < 0)
    {
        cout << "stack1 is empty," << endl;
        /*How to handle this condition.*/

    }
    else
    {
        type elem; 
        elem = st.back();
        st.pop_back();
        count--;
        return elem;
    }
}

我的问题是,在pop函数中,当容器对象为空时,我应该如何处理错误场景。在这种情况下,我想返回一些默认值,例如,如果容器是整数,则返回0/-1;如果容器是字符串,则返回""/null;如果容器是浮点型,则返回0.0……差不多吧。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-03 01:39:28

@RSahu的建议是一件好事。

另一种方法是将pop()函数的签名从:

代码语言:javascript
复制
type pop();

代码语言:javascript
复制
std::optional<type> pop();

如果堆栈为空,则返回std::nullopt,或者在通常情况下返回包装值:

代码语言:javascript
复制
if (count < 0) {
    return std::nullopt;
}

请注意,std::optional是在C++17语言标准中引入的;在C++14中,它是std::experimental::optional,或者可以将boost::optional用于C++11或更早的版本。

PS:当元素计数实际上是0时,将count设为-1是一个坏主意--非常令人困惑!

票数 3
EN

Stack Overflow用户

发布于 2018-06-03 01:31:06

处理它的一种方法是抛出一个异常。

代码语言:javascript
复制
if (count < 0)
{
    throw std::out_of_range("stack1 is empty");
}

我强烈反对使用std::cout将消息打印到该位置的终端。在数据结构的实现中使用std::cout是一种糟糕的编程实践。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50659424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档