这是我的代码,但是有一个我无法理解的问题:每当我在堆栈中推送一个整数时,剩余的(未填充的部分)堆栈都被sed: 3: "10i\
#define jsonConfi ...": invalid command code T
值填充。请解释一下我的错误是什么。
invalid command code T
答案 0 :(得分:1)
考虑:
Stack s(10);
for(int i = 0; i<=5; i++)
s.push(i);
你在print
中的:
std::cout << "Stack is ";
while(i <= max_size)
std::cout << base[i] << ' ';
在上面的例子中,s.max_size
是10,所以你打算打印base [0,10)的值,其中5个是未初始化的。因为应用程序还没有对内存做太多工作,所以当你执行分配时,你可能会得到一个原始(零)内存块。
代码的可能变体:
#include <iostream>
// using namespace std ; // unlearn the habbit of doing this.
#include <memory> // for unique_ptr
class Stack
{
// note: class is private by default.
// unique_ptr will automatically free memory for us.
using ptr_t = std::unique_ptr<int[]>;
ptr_t base_;
int* top_;
int* end_;
public :
Stack(int size=100)
: base_(new int[size])
, top_(base_.get())
, end_(top_ + size)
{}
bool empty() const
{ return top_ == base_.get(); }
bool full() const
{ return top_ == end_; }
// don't print errors from a library
bool push(int value)
{
if (full()) // written in terms of our own members
return false;
*(top_++) = value;
return true;
}
bool pop()
{
if (empty()) // written in terms of our own members
return false;
--top_;
return true;
}
const int& read_top() const // const ref so it's not modifiable
{ return *(top_-1); }
int size() const { return end_ - top_; }
int capacity() const { return end_ - base_.get(); }
std::ostream& print(std::ostream& to)
{
to << "Stack is ";
for (int* ptr = base_.get(); ptr != top_; ++ptr)
to << *ptr << ' ';
to << '\n';
return to;
}
// or we could do this:
friend std::ostream& operator << (std::ostream& to, const Stack& s)
{
to << '[';
for (int* ptr = s.base_.get(); ptr != s.top_; ++ptr) {
to << *ptr << ',';
}
return to << ']';
}
};
int main()
{
Stack s(5);
s.push(1);
s.push(2);
s.push(3);
s.print(std::cout);
std::cout << "stack is: " << s << '\n';
}
答案 1 :(得分:-2)
我不确定我的问题是否正确:你是什么意思&#34;每次我在我的堆栈中推送一个整数&#34;?据我所知,你初始化你的堆栈然后做一些推动,而不更改其间的不正确的数组。这里发生的是你的数组被初始化为0(不要指望你的编译器每次都这样做,但这次它确实 - 你很可能在没有优化的情况下进行编译),然后你添加单个元素,并且有人已经回答,你不打印你的堆栈(即从0到顶部),但整个不正确的数组。如果编译优化,您可能会获得垃圾值而不是零(数组未初始化为构造函数中的某些初始值,未分配的值可能包含任何值)。希望它有所帮助。
代码中的错误:在print()
方法中,您应该while(i < max_size)