如果我有一个类的头文件,如下所示:
class arrayStack
{
private:
struct StackNode
{
StackNode(int p, int v):previous(p),value(v){}
~StackNode(){std::cout<<"destructor calledn"<<std::endl;}
int previous;
int value;
};
public:
static const int STACKSIZE=100;
static const int NUMSTACK=3;
static int indexUsed;
arrayStack();
~arrayStack();
void push(int stackNum, int val);
int top(int stackNum);
void pop(int stackNum);
bool isEmpty(int stackNum);
vector<StackNode*> buffer;
int stackPointer[NUMSTACK];
};
以下是cpp文件的内容:
void arrayStack::push(int stackNum, int val)
{
int lastIdx=stackPointer[stackNum];
stackPointer[stackNum]=indexUsed;
indexUsed++;
buffer[stackPointer[stackNum]]=new StackNode(lastIdx,val);
}
int arrayStack::top(int stackNum)
{
return buffer[stackPointer[stackNum]]->value;
}
基本上,我知道我需要在向量缓冲区中存储STACKSIZE * NUMSTACK StackNode *(我知道我只是在这里使用一个数组)。现在,我想知道如何在ctor中为缓冲区保留足够大的空间。
以下是我的尝试:
buffer.reserve(STACKSIZE*NUMSTACK*sizeof(StackNode*))
但它似乎不起作用,因为在客户端代码中,当我尝试:
arrayStack tStack;
for(int i=0;i<3;i++)
for(int j=0; j<10;j++)
{
tStack.push(i,i+j);
}
程序由于下标的矢量赋值而崩溃。
答案 0 :(得分:2)
听起来想要使用resize
功能,而不是reserve
。
另外,如注释中所述,函数的参数是元素的数量,而不是字节数。
如果你打电话给buffer.resize(23)
,它会给你一个23个空指针的向量,你可以用方括号读取/修改它。