Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menyenaraikan-Memulakan Vektor dengan Jenis Alih Sahaja dalam C ?

Bagaimana untuk Menyenaraikan-Memulakan Vektor dengan Jenis Alih Sahaja dalam C ?

Barbara Streisand
Lepaskan: 2025-01-01 07:20:10
asal
664 orang telah melayarinya

How to Correctly List-Initialize Vectors with Move-Only Types in C  ?

initializer_list-Initialization of Vectors with Move-Only Types

Dalam C , apabila cuba menyenaraikan-memulakan vektor dengan unsur-unsur pergerakan -only type, seperti std::unique_ptr, pengkompil mungkin tersalah cuba menyalin elemen bukannya memindahkan mereka. Isu ini boleh diatasi menggunakan pelbagai teknik:

Pembungkus Perantaraan

Untuk mengelakkan salinan, jenis pembalut boleh digunakan untuk memegang nilai bergerak sahaja sebagai rujukan. Kelas rref_wrapper menunjukkan pendekatan ini dengan membungkus nilai bergerak sahaja dan menyediakan operator untuk mengekstrak nilai asas. Ini membolehkan nilai dialihkan ke dalam vektor tanpa menyalin.

Contoh:

std::initializer_list<rref_wrapper<std::unique_ptr<int>>> il{
    rref(std::make_unique<int>()), rref(std::make_unique<int>()),
    rref(std::make_unique<int>())
};
std::vector<std::unique_ptr<int>> v(il.begin(), il.end());
Salin selepas log masuk

std::make_move_iterator

Kaedah lain melibatkan penggunaan std::make_move_iterator untuk mencipta iterator yang, apabila dinyahrujuk, alihkan elemen yang ditunjuk. Ini menghapuskan keperluan untuk kelas pembalut.

Contoh:

std::unique_ptr<int> init[] = { std::make_unique<int>(), std::make_unique<int>(),
                                  std::make_unique<int>() };
std::vector<std::unique_ptr<int>> v{
    std::make_move_iterator(std::begin(init)), std::make_move_iterator(std::end(init))
};
Salin selepas log masuk

Dengan menggunakan teknik ini, anda boleh menyenaraikan-memulakan vektor dengan jenis bergerak sahaja , memastikan pemindahan pemilikan yang cekap dan betul.

Atas ialah kandungan terperinci Bagaimana untuk Menyenaraikan-Memulakan Vektor dengan Jenis Alih Sahaja 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