У меня есть функция, которая читает файлы в папке (я использую boost для этого). Я также пытаюсь сохранить только 2 файла (они являются файлами журналов, поэтому они вращаются, и я не хочу сохранять старые журналы = журналы в третьем файле). Я храню имена файлов в списке, но поскольку чтение не выполняется во временном порядке создания, мне нужно отсортировать список.Что лучше в моем случае: вектор или список?
Я знаю, что
векторы хороши:
- Доступ к отдельным элементам по их позиции индекса (постоянная времени).
- Итерация по элементам в любом порядке (линейное время).
- Добавить и удалить элементы с его конца (постоянное время амортизации).
и
Преимущество в список контейнеров:
- Эффективная вставка и удаление элементов в любом месте в контейнере (постоянное время).
- Эффективные движущиеся элементы и блок элементов внутри контейнера или даже между различными контейнерами (постоянное время).
- Итерация по элементам в прямом или обратном порядке (линейное время).
Я не уверен, что это лучший способ сделать это: используя список или вектор?
Должен ли я
- использование вектора и отсортировать его по возрастанию, удалить с конца, добавить новый элемент (в конце), порядок и т.д.; или
- используйте список и отсортируйте его по возрастанию, удалите с самого начала, добавьте новый элемент в конец, курорт и т. Д .;
- сортирует нужно только в самом начале, потому что каждое имя файла, вставить последний созданный?
- Если список/вектор отсортирован, какое время прибегать к нему?
- Если я использую
std::is_sorted
, это нормально, если вы не сортируете каждый раз?
Некоторые подробнее:
Поскольку вращение файла наддува не имеет «удалить файл, если слишком много» состояние, только «есть достаточно места на диске», у меня есть реализовал этот шаг хранения последних двух файлов или удалив старейший каждый раз, когда создается новый, и есть 2 файла журналов. Поэтому каждый раз, когда создается новый файл журнала, я проверяю список файлов, и если их достаточно (2 или более), просто удалите старые (ые) файлы. Поскольку имена файлов являются logs_%N.log
, я не могу знать, если файл logs_X1.log
старше logs_X2.log
например: перезапустить приложения, есть файлы logs_51.log, logs_52.log, что один собирается быть удалены? Предположим, что он собирается удалить logs_51.log и создать logs_0.log, если я его снова заново запустил, будут logs_52.log и logs_0.log. Какой из них будет удален сейчас?)
Вот почему мне нужен вид, потому что приложение может перезагрузиться, и я прочитал существующие файлы, завершает ту, которая имеет больше места, а затем создает новую ,
Если есть только два файла, какая цель сортировки или даже наличие контейнера? – dasblinkenlight
Я говорю, что разница не имеет значения, чтобы беспокоиться об этом. Вы оптимизируете то, что занимает очень мало времени. И это не так, как вы будете называть это миллиарды раз в цикле. – drescherjm
'использовать векторный и отсортировать его по возрастанию, удалить из конца, добавить новый элемент (в конце), изменить порядок и т. Д., Не имеет смысла. Вставка в начале выполняется намного быстрее, чем вставка и сортировка. – user2079303