微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

超出C ++中静态内置数组的限制

如何解决超出C ++中静态内置数组的限制

解决方案编辑:

未定义的行为不是此处的根本问题。检查我的评论以寻求解决方案,因为问题关闭后我无法发布答案。

我正在用C ++实现一个简单的堆栈数据结构。容量是静态的,并包含在类模板参数中。每当我尝试在堆栈已满时推入堆栈时,都不会听到很大的错误。取而代之的是,将计数设置为被压入堆栈的数量,并增加一个

代码

template <typename T,size_t N>
class stack {
public:
    stack() : m_count(0),m_data{ 0 } {}

    // --- member functions ---
    const size_t& push(const T& value) {
        m_data[m_count] = value;
        m_count++;
        return m_count;
    }

    T pop() {
        m_count--;
        T temp = m_data[m_count];
        m_data[m_count] = 0;

        return temp;
    }

    T& peek() {
        return m_data[m_count - 1];
    }
    
    // --- capacity ---
    const size_t capacity() const {
        return N;
    }

    const size_t& size() const {
        return m_count;
    }

    const bool empty() const {
        return m_count ? false : true;
    }

    friend bool operator==(const stack& lhs,const stack& rhs);
private:
    T m_data[N];
    size_t m_count;
};

并在main中像这样运行:

stack<int,5> st;
for (size_t i = 0; i < st.capacity(); ++i)
    st.push(5);
std::cout << "Size of stack: " << st.size() << std::endl; // 5
std::cout << "Capacity of stack: " << st.capacity() << std::endl; // 5

st.push(93); // No visible error
std::cout << "Size of stack: " << st.size() << std::endl; // 94
std::cout << "Capacity of stack: " << st.capacity() << std::endl; // 5

有人知道这是怎么回事吗?

编辑:澄清问题

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。