Выделение памяти для списка
Есть класс односвязного списка типа list, есть другой класс типа graph. В конструкторе у меня выделяется память: H = new list[3000000] Но дело в том, что мне не всегда нужны все 3000000, а время нужное для выделения такого большого кол-ва элементов мне нужно сократить. Посоветуйте как сделать так, чтобы память выделялась только тогда, когда я буду ее использовать?
выделять память непосредствено перед тем как ее использовать, т.е. перед добавлением нового элемента
Например, перегрузить operator[]. Чтобы, если индекс лежит за пределами выделенной памяти, выделялась новая память.
При добавлении очередного элемента смотрим, если места нет, резервируем 256 штук, используем только одно.
При добавлении следующего элемента видим, что есть 255 зарезервированных мест, выделение памяти не требуется.
Некоторые алгоритмы выделяют 50% от уже существующего объема (но не менее 1). Открой, например, реализацию вектора в MS VS
Цитата: Alexander92
Например, перегрузить operator[]. Чтобы, если индекс лежит за пределами выделенной памяти, выделялась новая память.
Целесообразно ли так делать? Будет ли использование оператора более быстрым по времени для тех же 3000000 элементов? Просто эту прогу я пишу для курсовой и не хочу чтобы данные на графике x=кол-во элементов y=время работы были не искажены.
Цитата: Charley
Есть класс односвязного списка типа list, есть другой класс типа graph. В конструкторе у меня выделяется память: H = new list[3000000] Но дело в том, что мне не всегда нужны все 3000000, а время нужное для выделения такого большого кол-ва элементов мне нужно сократить. Посоветуйте как сделать так, чтобы память выделялась только тогда, когда я буду ее использовать?
Что мешает взять и посмотреть исходники std::list? Оно темплейт, поэтому реализация точно есть у тебя на компе.
п.с. лучше посмотри реализации MS и GCC, они немного отличаются.
Цитата: Charley
Целесообразно ли так делать? Будет ли использование оператора более быстрым по времени для тех же 3000000 элементов? Просто эту прогу я пишу для курсовой и не хочу чтобы данные на графике x=кол-во элементов y=время работы были не искажены.
Во-первых, это проверяется тестированием. Во-вторых, я ж не говорю, что нужно обязательно выделять строго по одному элементу. Можно, грубо говоря, если не хватает памяти, выделить еще 10 элементов и т.п. Или поступить так, как предлагает cheburator.