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);
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!