Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Meratakan Vektor yang Dikembalikan daripada Fungsi Menggunakan Talian Paip Julat-V3?

Bagaimanakah Saya Boleh Meratakan Vektor yang Dikembalikan daripada Fungsi Menggunakan Talian Paip Julat-V3?

Patricia Arquette
Lepaskan: 2024-11-01 06:28:30
asal
967 orang telah melayarinya

How Can I Flatten Vectors Returned from a Function Using Range-V3 Pipelines?

Pelipisan Paip Julat dengan Bekas Sementara Menggunakan Julat-V3

Masalah:

Anda mempunyai julat elemen (src) dan fungsi pihak ketiga (f) yang mengambil elemen julat sebagai input dan mengembalikan vektor. Anda ingin mengubah setiap elemen dalam julat menggunakan f dan meratakan vektor yang terhasil ke dalam julat tunggal. Walau bagaimanapun, menggunakan view::transform dan view::join secara langsung tidak akan berfungsi kerana paparan tidak boleh dibuat untuk bekas sementara.

Penyelesaian:

Untuk menyokong saluran paip tersebut , range-v3 memperkenalkan pengendali pandangan::cache1. Operator ini membenarkan anda menyimpan hasil paparan dalam bekas sementara dan kemudian mencipta paparan bekas itu. Dengan memasukkan paparan::cache1 dalam saluran paip, anda boleh membuat paparan vektor yang diratakan:

auto rng = src | views::transform(f) | views::cache1 | views::join;
Salin selepas log masuk

Sampel Kod:

Sampel kod berikut menunjukkan cara untuk menggunakan paparan::cache1 untuk mencipta saluran paip julat yang mengubah dan meratakan elemen daripada julat:

<code class="cpp">#include <range/v3/view.hpp>
#include <range/v3/algorithm.hpp>
#include <vector>

std::vector<std::string> f(int i) {
  return std::vector<std::string>(i, char('a' + i));
}

int main() {
  auto rng = views::iota(0, 4)
        | views::transform([](int i) { return f(i); })
        | views::cache1
        | views::join('-');
  
  check_equal(rng, {'-', 'b', '-', 'c', 'c', '-', 'd', 'd', 'd'});
  
  CPP_assert(input_range<decltype(rng)>);
  CPP_assert(!range<const decltype(rng)>);
  CPP_assert(!forward_range<decltype(rng)>);
  CPP_assert(!common_range<decltype(rng)>);

  return 0;
}</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meratakan Vektor yang Dikembalikan daripada Fungsi Menggunakan Talian Paip Julat-V3?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan