"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso usar Range Pipelines com contêineres temporários?

Como posso usar Range Pipelines com contêineres temporários?

Publicado em 2024-11-12
Navegar:795

How Can I Use Range Pipelines with Temporary Containers?

Escrevendo Range Pipelines com Contêineres Temporários

No range-v3, ao trabalhar com um pipeline que utiliza uma função de terceiros que retorna um vetor, é essencial criar um pipeline que mapeie essa função para todos os elementos do intervalo e nivele todos os vetores resultantes em um único intervalo com todos os seus elementos.

Inicialmente, pode-se tentar escrever um pipeline como como:

auto rng = src | view::transform(f) | view::join;

No entanto, essa abordagem anteriormente não era viável, pois é impossível criar visualizações de contêineres temporários como os produzidos por f.

Para resolver esse problema, um patch foi introduzido que agora permite que tais pipelines de intervalo sejam escritos corretamente. A chave é adicionar o operador views::cache1 ao pipeline, como visto no exemplo a seguir:

auto rng = views::iota(0, 4)
        | views::transform([](int i) { return std::string(i, char('a'   i)); })
        | views::cache1
        | views::join('-');

Isso garante que o pipeline processe os contêineres temporários corretamente, permitindo-nos escrever pipelines de intervalo que utilizam contêineres temporários de maneira eficaz.

Para o problema descrito em a questão, a solução seria modificar o pipeline da seguinte forma:

auto rng = src | views::transform(f) | views::cache1 | views::join;
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3