-1
如果我有這樣一類的頭文件如下:如何爲類對象預留向量空間?
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);
}
程序崩潰是由於在標矢量分配。
什麼'push'?此外,保留需要的元素數量,而不是以字節爲單位的內存量,所以你保留太多。 –
爲什麼你需要存儲的指針在一個std :: vector的?值得注意的是,對於一個容器保留內存並不意味着你要構造這個數字元素,它只是一個預分配內存。 – cpx