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:
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>
Butiran Pelaksanaan:
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>
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!