автоматизация — если размер моего стека превышен, как мне автоматически настроить его? Переполнение стека

Итак, у меня есть класс CStack с использованием метода LIFO (Last in First out). Использование стандартных переменных bottom/top/size и методы, такие как push/pop/full/empty/print, Это char стек.

Мой вопрос: если я добавляю что-то в этот стек, когда он заполнен, как я могу автоматически настроить размер? Я думал о memcpy() метод, но я не очень понимаю, как это работает (пока).

Любая помощь будет оценена.

Вот мой код:

class CStack {
private:
char *bottom_;
char *top_;
int size_;
public:

CStack(int n = 20) {
bottom_ = new char[n];
top_ = bottom_;
size_ = n;
}

void push(char c) {
*top_ = c;
top_++;
}

int num_items() {
return (top_ - bottom_);
}

char pop() {
top_--;
return *top_;
}

int full() {
return (num_items() >= size_);
}

int empty() {
return (num_items() <= 0);
}

void print() {
cout << "Stack currently holds " << num_items() << " items: ";
for (char *element = bottom_; element < top_; element++) {
cout << " " << *element;
}
cout << "\n";
}

~CStack() { // stacks when exiting functions
delete [] bottom_;
}
};

0

Решение

Это должно делать то, что вы хотите. Он не обрабатывает исключения, но я думаю, что вы еще не достигли такого уровня в своем курсе?

void push(char c) {
int used = top - bottom;
if (used >= size_) {
// grow the stack
char* newBottom = new char[used + 20];
memcpy(newBottom, bottom_, used * sizeof(char));
top_ = newBottom + used;
size_ = used + 20;
delete[] bottom_;
bottom_ = newBottom;
}
*top_ = c;
top_++;
}
2

Другие решения


По вопросам рекламы [email protected]