Замена для std :: views :: zip/keys в C ++ 20C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Замена для std :: views :: zip/keys в C ++ 20

Сообщение Anonymous »

мне нужно перенести какой -то код из C ++ 23, который использует std :: vome :: Zip / to c ++ 20 (портирование в cuda) (у которого нет std :: visions :: zip ), имея только один конкретный случай использования этого кода.
У меня есть данные в одном std :: evector и маски для данных в другом std :: vector . Некоторая функция работает с диапазоном и обновляет все элементы вектора данных, и я хочу использовать его для пар значений/масок. Таким образом, эта функция должна обрабатывать только те значения, которые имеют 1.0F в соответствующих масках. Я ожидаю, что сгенерированный код будет иметь дело с исходными векторами без временных копий. PrettyPrint-Override ">

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

#include 
#include 
#include 
#include 

void foo(std::ranges::input_range auto& data) {
for (auto it = data.begin(); it != data.end(); ++it) {
*it = 7.0f;
}
}

int main()
{
std::vector values = { 0.0f, 1.0f, 0.0f, 2.0f };
std::vector masks = { 0.0f, 1.0f, 1.0f, 0.0f };

auto filtered = std::views::zip(values, masks) |
std::views::filter([](const auto& tuple) { return std::get(tuple) != 0.0f; });

auto masked = std::views::keys(filtered);

foo(masked);

std::ranges::copy
(
values,
std::ostream_iterator{std::cout, ", "}
);
std::cout 
с C ++ 20 У меня есть некоторые варианты здесь. Я реализовал эту версию Demo < /p>
#include 
#include 
#include 
#include 

void foo(std::ranges::input_range auto& data) {
for (auto it = data.begin(); it != data.end(); ++it) {
*it = 7.0f;
}
}

int main()
{
std::vector values = { 0.0f, 1.0f, 0.0f, 2.0f };
std::vector masks = { 0.0f, 1.0f, 1.0f, 0.0f };

auto masked = values | std::views::filter([&](const auto& value) {
return masks[&value - values.data()];
});

foo(masked);

std::ranges::copy
(
values,
std::ostream_iterator{std::cout, ", "}
);
std::cout   Каким будет способ реализовать это в C ++ 20 здесь? < /p> 

Подробнее здесь: [url]https://stackoverflow.com/questions/79591445/replacement-for-stdviewszip-keys-in-c20[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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