2011-09-27 4 views
-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 *를 저장할 필요가 알고 벡터 버퍼 (난 그냥 여기에 배열을 사용하여 알아). 자, 어떻게하면 버퍼에 충분한 공간을 확보 할 수 있을지 궁금합니다.

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

프로그램으로 인해 첨자를 통해 벡터 할당에 추락했다.

+2

'푸시'란 무엇입니까? 또한 예약은 메모리 양이 아닌 요소의 수를 바이트 단위로 취하므로 너무 많이 예약합니다. –

+0

std :: vector에 포인터를 저장해야하는 이유는 무엇입니까? 컨테이너에 대한 메모리를 예약한다고해서 그 수만큼의 요소가 구성되는 것은 아닙니다. 사전 할당 된 메모리 일뿐입니다. – cpx

답변

2

reserve이 아닌 resize 함수를 사용하려는 것 같습니다.

또한 주석에서 언급 한 것처럼 함수에 대한 인수는 바이트 수가 아닌 요소 수입니다.

buffer.resize(23)을 호출하면 23 개의 널 포인터 벡터를 얻을 수 있으며 대괄호를 사용하여 읽고 수정할 수 있습니다.

관련 문제