Замена для 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 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Замена для std :: views :: zip/keys в C ++ 20
    Anonymous » » в форуме C++
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Замена для std :: views :: zip/keys в C ++ 20
    Anonymous » » в форуме C++
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Замена для std :: views :: zip/keys в C ++ 20
    Anonymous » » в форуме C++
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Замена для std :: views :: zip/keys в C ++ 20
    Anonymous » » в форуме C++
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Каково использование std :: ranges :: views :: lazy_split, когда у нас есть std :: ranges :: views :: split?
    Anonymous » » в форуме C++
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

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