Bagaimana untuk Melepasi std::array Saiz Tidak Diketahui kepada Fungsi dalam C ?

Barbara Streisand
Lepaskan: 2024-10-24 19:04:30
asal
941 orang telah melayarinya

How to Pass an std::array of Unknown Size to a Function in C  ?

Melalui std::array Saiz Tidak Diketahui kepada Fungsi

Dalam C , bagaimana anda boleh mencipta fungsi yang menerima std: :array daripada jenis yang diketahui, tetapi saiz yang tidak diketahui?

Pertimbangkan contoh berikut:

<code class="cpp">void mulArray(std::array<int, ?>& arr, const int multiplier) {
    for(auto& e : arr) {
        e *= multiplier;
    }
}</code>
Salin selepas log masuk

Memandangkan fungsi ini, anda boleh mencipta std::arrays dengan saiz yang berbeza dan menyerahkannya kepada mulArray:

<code class="cpp">std::array<int, 17> arr1;
std::array<int, 6>  arr2;
std::array<int, 95> arr3;

mulArray(arr1, 3);
mulArray(arr2, 5);
mulArray(arr3, 2);</code>
Salin selepas log masuk

Adakah terdapat cara yang lebih mudah untuk mencapai ini, sama seperti menggunakan tatasusunan gaya C biasa?

Tidak, tidak mungkin untuk melakukan ini operasi tanpa menggunakan templat fungsi atau bekas alternatif seperti std::vector.

Penyelesaian Templat Fungsi

Untuk mencipta fungsi generik yang boleh mengendalikan susunan std:: sebarang saiz , anda perlu menggunakan templat fungsi:

<code class="cpp">template<std::size_t SIZE>
void mulArray(std::array<int, SIZE>& arr, const int multiplier) {
    for(auto& e : arr) {
        e *= multiplier;
    }
}</code>
Salin selepas log masuk

Templat ini mentakrifkan fungsi yang mengambil tatasusunan integer dari sebarang saiz dan mendarab setiap elemen dengan pengganda yang diberikan.

Contoh langsung pelaksanaan ini boleh didapati di sini: [Contoh Langsung](https://godbolt.org/z/Y932XW)

Atas ialah kandungan terperinci Bagaimana untuk Melepasi std::array Saiz Tidak Diketahui kepada Fungsi dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber: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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!