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