Динамическое размещение происходит каждый раз, когда элементы вставляются в контейнер std :: list?

0

Если я вставляю элемент в пустой std::list я бы ожидал, что будет выделено выделение памяти для хранения моего элемента. Теперь, если я удалю этот элемент и добавлю новый, освободите выделенную память и перераспределите ее при вставке или общие реализации, вы сможете сохранить пул записей, которые будут выпущены (стерты), чтобы их можно было повторно использовать?

Теги:
containers
stdlist

1 ответ

0

std::list<> реализует структуру данных связанного списка и, следовательно, (концептуально) выделяет новую память каждый раз, когда элемент вставлен. При этом все стандартные классы контейнеров принимают параметр типа, который представляет используемый распределитель. С помощью этого параметра вы можете изменить распределитель на тот, который просто возвращает указатели в предварительно выделенную область памяти. Конечно, если вы уже знаете, сколько памяти вам нужно заранее, непонятно, почему вы должны использовать этот тип структуры данных.

  • 0
    Мне нужно использовать список вместо deque, потому что я буду вставлять и один конец и удалять на другом конце, и будут другие объекты с итераторами, которые нельзя будет аннулировать, когда есть вставки или удаления. Это необходимо для реализации движущегося окна данных с нерегулярной выборкой.
  • 0
    Как вы намерены, чтобы итератор не был признан недействительным, если элемент удален? Это не имеет смысла независимо от структуры данных.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню