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

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