如何为类对象保留向量空间?

时间:2011-09-27 06:18:18

标签: c++ vector

如果我有一个类的头文件,如下所示:

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);
    }

程序由于下标的矢量赋值而崩溃。

1 个答案:

答案 0 :(得分:2)

听起来想要使用resize功能,而不是reserve

另外,如注释中所述,函数的参数是元素的数量,而不是字节数。

如果你打电话给buffer.resize(23),它会给你一个23个空指针的向量,你可以用方括号读取/修改它。