Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Memulakan `std::array` Tidak Boleh Dibina Tidak Lalai Tanpa Ulangan dalam C ?

Bagaimana untuk Memulakan `std::array` Tidak Boleh Dibina Tidak Lalai Tanpa Ulangan dalam C ?

Linda Hamilton
Lepaskan: 2024-10-30 03:31:02
asal
779 orang telah melayarinya

How to Initialize a Non-Default Constructible `std::array` Without Repetition in C  ?

Memulakan Non-Default Constructible std::array Without Repetition

Dalam C , memulakan std::array elemen boleh bina bukan lalai boleh menjadi cabaran. Kaedah permulaan standard menjadi menyusahkan apabila n, saiz tatasusunan, adalah besar atau parameter templat.

Penyelesaian:

Penyelesaian elegan memanfaatkan gabungan iterator dan templat. Begini caranya:

Kami mentakrifkan dua utiliti pembantu:

  • genseq_t menjana jujukan integer [0, 1, ..., n-1 ].
  • ulang mencipta tatasusunan dengan mengulang nilai yang diberikan bilangan kali yang ditentukan.

Dengan menggunakan utiliti ini, kita boleh memulakan std::array dalam fungsi templat f seperti berikut:

<code class="cpp">template<typename T, int N>
void f(T value)
{
    std::array<T, N> items = repeat(value, genseq_t<N>{});
}</code>
Salin selepas log masuk

Butiran Pelaksanaan:

  • genseq_t: Ia menggunakan templat variadik untuk mencipta jujukan integer hingga n.
  • ulang: Fungsi ini membongkar jujukan yang dijana oleh genseq_t dan membina tatasusunan dengan menggunakan T(N, nilai) untuk setiap integer dalam jujukan.

Contoh:

Pertimbangkan permulaan dengan nilai sebagai integer dan n sebagai parameter templat:

<code class="cpp">void f(int value)
{
    std::array<T, 5> items = repeat(value, genseq_t<5>{});
}</code>
Salin selepas log masuk

Di sini, item akan dimulakan dengan nilai diulang lima kali: {value, value, value, value, value}.

Kelebihan:

Pendekatan ini lebih ringkas, terutamanya apabila n ialah besar. Ia juga menghapuskan keperluan untuk mengulang nilai secara manual.

Atas ialah kandungan terperinci Bagaimana untuk Memulakan `std::array` Tidak Boleh Dibina Tidak Lalai Tanpa Ulangan dalam C ?. 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