如何解决超出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 举报,一经查实,本站将立刻删除。