Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Cekap Membaca Fail ke dalam std::vector Tanpa Overhed yang Tidak Perlu?

Bagaimana untuk Cekap Membaca Fail ke dalam std::vector Tanpa Overhed yang Tidak Perlu?

Patricia Arquette
Patricia Arquetteasal
2024-11-10 21:35:031048semak imbas

How to Efficiently Read Files into std::vector Without Unnecessary Overhead?

Kaedah Alternatif untuk Membaca Fail ke dalam std::vector

Membaca fail ke dalam std::vector cekap adalah penting untuk tugas pemprosesan data. Walau bagaimanapun, beberapa kaedah, seperti rizab() dan ubah saiz(), menanggung overhed tambahan disebabkan oleh permulaan elemen. Atas sebab ini, kaedah alternatif mungkin lebih disukai.

Salah satu kaedah sedemikian ialah memanfaatkan iterator daripada kelas std::istreambuf_iterator. Pendekatan ini menghapuskan salinan yang tidak diperlukan dan membenarkan akses terus kepada kandungan fail. Bentuk kanonik pendekatan ini ialah:

#include<iterator>
// ...

std::ifstream testFile("testfile", std::ios::binary);
std::vector<char> fileContents((std::istreambuf_iterator<char>(testFile)),
                               std::istreambuf_iterator<char>());

Untuk mengelakkan pengagihan semula, pertimbangkan untuk menempah ruang dalam vektor terlebih dahulu:

#include<iterator>
// ...

std::ifstream testFile("testfile", std::ios::binary);
std::vector<char> fileContents;
fileContents.reserve(fileSize);
fileContents.assign(std::istreambuf_iterator<char>(testFile),
                    std::istreambuf_iterator<char>());

Atas ialah kandungan terperinci Bagaimana untuk Cekap Membaca Fail ke dalam std::vector Tanpa Overhed yang Tidak Perlu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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