Как использовать результат std::views::filter для std::ranges::random_access_range?C++

Программы на C++. Форум разработчиков
Anonymous
Как использовать результат std::views::filter для std::ranges::random_access_range?

Сообщение Anonymous »

std::views::filter не может моделировать концепцию std::ranges::random_access_range (скорее всего, потому, что он не может сопоставить произвольный доступ из временного фильтруемого диапазона в исходный диапазон ; поправьте меня, если я ошибаюсь в рассуждениях или формулировках).
Я могу использовать std::ranges::to() (см. демо ниже) ), чтобы преобразовать временный диапазон в вектор, но:
  • Он создает копию значений вектора v, и я не могу его изменить их. Есть ли способ решить эту проблему?
  • Это лучший (наиболее эффективный с точки зрения производительности и перераспределения памяти) подход?
  • Каким будет реальное влияние на производительность и перераспределение памяти? Будет ли настоящий std::vector создаваться в памяти динамически?
(Конечно, «наиболее эффективный» здесь означает «без контекста»; наверняка в реальных случаях код функции rar можно изменить для внутренней фильтрации, избегая дополнительных выделений. Вопрос в том, можно ли это сделать лучше, если функция rar "неприкосновенна"?)


Подробнее здесь: https://stackoverflow.com/questions/793 ... cess-range

Вернуться в «C++»