Batasan Pembina std::array
Soalan:
Mengapa tidak std ::array menyediakan pembina yang memulakan semua elemen dengan nilai yang ditentukan?
Jawapan:
Dengan reka bentuk, std::array ialah jenis agregat, yang bermaksud ia tidak mempunyai pembina yang ditentukan pengguna. Akibatnya, ia tidak boleh mempunyai pembina seperti:
<code class="cpp">std::array<T, size>::array(const T& value);</code>
Alternatif:
Walaupun std::array tidak mempunyai pembina sedemikian, terdapat pilihan alternatif untuk dicapai hasil yang sama:
Pembinaan Lalai dan std::fill: Selepas lalai membina std::array, anda boleh menggunakan fungsi std::fill untuk menetapkan nilai khusus kepada semua elemen:
<code class="cpp">std::array<int, 10> arr; std::fill(arr.begin(), arr.end(), -1);</code>
Permulaan Trivial dan std::uninitialized_fill: Jika jenis yang terkandung dalam std::array boleh dimulakan secara remeh, pembinaan lalai tidak akan memulakan memori kepada sifar tetapi akan meninggalkannya tanpa dimulakan. Dalam kes sedemikian, anda boleh menggunakan std::uninitialized_fill untuk memberikan nilai khusus kepada semua elemen yang tidak dimulakan:
<code class="cpp">std::array<std::string, 10> arr = {}; // Trivial initialization std::uninitialized_fill(arr.begin(), arr.end(), std::string("Example"));</code>
Dengan memahami batasan pembina std::array dan menggunakan alternatif ini , anda boleh memulakan semua elemen std::array dengan nilai yang dikehendaki dengan berkesan.
Atas ialah kandungan terperinci Mengapa Tiada Pembina dalam std::array untuk Menetapkan Nilai Tertentu kepada Semua Elemen?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!