Я хочу удалить элемент из массива. У меня есть массив ints от 1 до 9. Мой алгоритм ищет строку, если число в строке соответствует числу в массиве, оно удаляет номер в массиве. Каков наиболее эффективный алгоритм для этого? Я думал о связанном списке, потому что я мог просто сократить список, но позже он может запутаться, и он может быть не так эффективен, как массив.
Наиболее эффективным методом является использование пустых/полных флагов контейнера для каждого слота в массиве. В противном случае каждый элемент должен быть перемещен вверх по слоту.
Здесь есть простой способ для многих переменных, чтобы дать хороший ответ.
Из вашего описания у вас есть 2 структуры данных, каждая из которых имеет список значений, и вы хотите удалить все значения из первой структуры, которые находятся во второй структуре. Какая структура является второй структурой? у вас есть контроль над этим? Это что-то, что можно легко и быстро найти как набор или unordered_set или это что-то, что нужно повторить, чтобы найти значение как связанный список? Удаляет ли структура данных, которую вы удаляете, в порядке возрастания?
В идеале, один из этих контейнеров придется перебирать от начала до конца, а другой - то, что можно быстро найти. Вы хотите, чтобы контейнер, который вы собираетесь удалить, быстро удалил. Если массив необходимо сохранить в порядке, то удаление из массива - это процесс, требующий много времени, который требует либо A: перемещение каждого элемента из точки удаления и обратно, а затем отслеживание фактической длины массива или B: копирование содержимое массива в новый массив, в котором отсутствует этот элемент. На самом деле, здесь недостаточно информации, чтобы дать вам хороший ответ о том, какие алгоритмы или контейнеры лучше всего подходят для вашей задачи.
std::vector
если у вас нет причин не делать этого. В большинстве случаев производительностьstd::vector
лучше, чем производительностьstd::list