-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);
}
프로그램으로 인해 첨자를 통해 벡터 할당에 추락했다.
'푸시'란 무엇입니까? 또한 예약은 메모리 양이 아닌 요소의 수를 바이트 단위로 취하므로 너무 많이 예약합니다. –
std :: vector에 포인터를 저장해야하는 이유는 무엇입니까? 컨테이너에 대한 메모리를 예약한다고해서 그 수만큼의 요소가 구성되는 것은 아닙니다. 사전 할당 된 메모리 일뿐입니다. – cpx