Bagaimana untuk Memulakan `std::vector` daripada Tatasusunan gaya C dengan Cekap?

Susan Sarandon
Lepaskan: 2024-11-12 13:37:02
asal
164 orang telah melayarinya

How to Initialize a `std::vector` from a C-style Array Efficiently?

Permulaan std::vektor yang Cekap daripada Array gaya-C

Apabila bekerja dengan kod warisan atau kebergantungan luaran, anda mungkin menghadapi senario di mana data disediakan sebagai tatasusunan gaya C. Mengintegrasikan data ini ke dalam struktur C moden seperti std::vector memerlukan pertimbangan yang teliti untuk kecekapan.

Dalam coretan kod yang disediakan, kelas Foo mempunyai std::vector bernama w_. Untuk mengisi vektor ini dengan data yang dibekalkan sebagai tatasusunan gaya C (w dengan panjang len), anda memerlukan kaedah kos efektif.

Elakkan Saiz dan Penyalinan Berlebihan

Walaupun anda boleh mengubah saiz w_ kepada len dan mengisinya secara manual, pendekatan ini melibatkan saiz semula yang tidak perlu dan penyalinan unsur demi unsur. Begitu juga, menggunakan std::copy() memperkenalkan operasi salinan tambahan.

Aritmetik Penunjuk Leverage

Penyelesaian yang lebih cekap ialah menggunakan aritmetik penuding. Memandangkan penunjuk boleh dianggap sebagai iterator, anda boleh memulakan w_ terus menggunakan julat [w, w len):

w_.assign(w, w + len);
Salin selepas log masuk

Sintaks ini memulakan w_ dengan menetapkan julat elemen daripada tatasusunan gaya C w kepada penghujungnya. Kelas std::vector menjaga memperuntukkan memori yang diperlukan dan menyalin elemen dengan cekap.

Dengan menggunakan kaedah ini, anda mengelakkan overhed saiz semula eksplisit dan operasi salinan berasingan, menghasilkan pendekatan yang lebih cekap dan ringkas .

Atas ialah kandungan terperinci Bagaimana untuk Memulakan `std::vector` daripada Tatasusunan gaya C dengan Cekap?. 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