Учитывая такую структуру, как я могу создать расширяемый (векторный) массив?
struct IntArray {
int size;
int capacity;
int *contents;
};
Я думал об использовании содержимого int *, чтобы указать на массив целых чисел и просто изменить указатель по мере того, как IntArray расширяется, но как я узнаю, какой размер сделать мой первоначальный массив целых чисел?
Как сказал @aaronman, вам было бы нехорошо, если бы мы просто дали вам окончательное решение: если вы хотите что-то узнать, лучше попробовать это самостоятельно с нуля (иначе просто используйте существующий std::vector
или QVector
или любой другой вектор).
Поэтому вместо этого я предлагаю вам увидеть некоторые уроки или некоторые примеры для вдохновения, а затем начать с нуля. Даже простой поиск google для c++ учебника, реализующего динамический массив, даст некоторые терпимые видео, подобные этому, а также некоторые текстовые ссылки.
После того как вы поняли детали реализации, вам может понадобиться создать интерфейс вашего массива, а точки, которые следует учитывать, могут быть следующими:
class
вместо struct
чтобы поля были приватными по умолчанию (инкапсуляция)push_back
может добавить к концу. Вы увидите, что добавление элемента может привести к перераспределению, поэтому было бы неплохо извлечь процесс перераспределения в другой (возможно, частный) метод (чтобы сделать его повторно используемым) и реализовать его с помощью идей из этого видео, а затем вызвать его из push_back
если size == capacity
. Наконец, вы можете сравнить свою реализацию с std::vector
или каким-либо другим существующим динамическим массивом, чтобы узнать, не хватает ли вы чего-то. Примерно три года назад мне пришлось сделать собственную реализацию вектора в моей дипломной работе (для тонкого контроля за его модификацией и перераспределением по соображениям производительности), вы также можете проверить это, но (отказ от ответственности!) Вы можете обнаружить, что это довольно сложно и беспорядочно после всех моих попыток оптимизации :)
Преуспевать! Надеюсь, что это поможет (и немного вдохновляет вас).