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
902 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!

sumber:php.cn
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