Другие языки программирования и технологии

помогите пожалуйста по программированию!!!

Здравствуйте! У меня такой вопрос (с++): пользователю выводится меню, пока не нажат выход.
Есть класс, и пользователь может создавать объекты этого класса, все объекты будут в массиве, заранее мы не знаем какое кол-во создается, под каждый нужно динамически выделить память, под первый элемент мы выделяем в самой программе, в конструкторе или в функции???
а по поводу повторных вызовов у меня такая мысль: создаем в функции временный массив той же размерностью, копируем в него все элементы, удаляем постоянный массив, выделяем память на 1 больше, и копируем в него из временного, который тоже удаляем. Все правильно??
Всем спасибо! надеюсь понятно объяснила, что хочу=)
Tigran Davtyan
Tigran Davtyan
109
Есть две концепции решения вашего вопроса. В обоих сперва выделяется память под динамический массив объектов заранее определённого размера, например на 8 элементов, а далее идёт его заполнение объектами и одновременно проверяется остаток свободных ячеек массива. Как только все ячейки заполнены, а в массив нужно добавить очередной объект, размер массива увеличивают. В первом случае его увеличивают на заданное количество, например ещё на 8 элементов, потом ещё на 8 элементов. Во втором случае размер массива каждый раз удваивается: 8, 16, 32, 64, 128 и так далее. Это делается с помощью битового сдвига влево.

Для управления размером памяти используются функция либо метод класса, в зависимости от реализации алгоритма, которые сперва создают новый массив увеличенного массива, затем производится поэлементное копирование, потом память по указателю старого массива освобождается и наконец указателю старого массива присваивается адрес нового.

Всё, спасибо! Надеюсь, понятно объяснил, то, что вам нужно)
Дмитрий Лях
Дмитрий Лях
62 511
Лучший ответ
Нет. Все гораздо проще. Во первых создание обьектов класса делается в программе, причем динамический массив реализован в vector.
size ернет его размер, а push внесет еще один.
память под динамические объекты выделяется командой "new" и очищается командой "delete" (не забываем скобки [], если удаляется массив)
Ничем другим память под динамические объекты не выделяется.
Формально, конструктор - это то, что запустится сразу после вызова new.

Над структурой программы сами думайте. Чтобы увеличить массив, нужно увеличить массив. Без танцев с бубнами. Как это делается в обычном C - знаю, как в C++ сейчас не подскажу
есть пути куда короче
. .
. .
1 311