Как я могу элегантно заполнить/инициализировать два (или более) диапазонов из диапазона, содержащего пары/кортежи элеменC++

Программы на C++. Форум разработчиков
Anonymous
Как я могу элегантно заполнить/инициализировать два (или более) диапазонов из диапазона, содержащего пары/кортежи элемен

Сообщение Anonymous »

Для проведения нарастных диапазонов у нас есть std :: views :: Zip и друзья. Функция «Индекс фильтра» как выражение диапазона? < /p>

Код: Выделить всё

auto getVerticesAndNormalsForIndices(const std::vector& indices, const std::vector
& allVertices, const std::vector& allNormals)
{
std::vector vertices(indices.size());
std::vector normals(vertices.size());
std::ranges::transform(indices, std::views::zip(vertices, normals).begin(), [&allVertices, &allNormals](const size_t i)
{
return std::pair{ allVertices[i], allNormals[i] };
});
return { std::move(vertices), std::move(normals) };
}
Я знаю, что мог бы создать представление о нормале и вершинах, а затем использовать два отдельных вызова для std :: elements , а затем вызов к STD: : janges :: to для извлечения вектора , но это содержит много повторения. Есть ли стандартный способ выполнения этого типа «распаковки» или есть способ написать интегрированный способ разобщить контейнеры (возможно, назначение ZIP_VIEW?).


Подробнее здесь: https://stackoverflow.com/questions/794 ... containing

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