Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menulis dengan Cekap kepada Penampan Pra-Peruntukan Menggunakan C Standard Streams?

Bagaimanakah Saya Boleh Menulis dengan Cekap kepada Penampan Pra-Peruntukan Menggunakan C Standard Streams?

Patricia Arquette
Patricia Arquetteasal
2024-11-28 09:36:11839semak imbas

How Can I Efficiently Write to a Pre-Allocated Buffer Using C   Standard Streams?

Menetapkan Penampan Dalaman untuk Strim Standard Menggunakan pubsetbuf

Masalah:

Dalam percubaan untuk tulis data ke penimbal sedia ada menggunakan aliran rentetan, pengaturcara pada mulanya menggunakan salinan untuk memindahkan kandungan aliran ke penimbal, berhasrat untuk mengelakkan penyalinan data yang berlebihan. Selepas itu, mereka mencuba streambuf::pubsetbuf() untuk mencapai ini, tetapi mendapati ia tidak mengubah suai penimbal di bawah pelaksanaan perpustakaan standard Visual Studio 2008 C.

Jawapan:

Setelah siasatan lanjut, ternyata kaedah pubsetbuf dalam pelaksanaan perpustakaan yang diberikan pada dasarnya adalah tanpa operasi. Untuk mengkonfigurasi strim untuk menulis kepada penimbal tertentu, menggunakan kelas std::streambuf tersuai disyorkan:

template <typename char_type>
struct ostreambuf : public std::basic_streambuf<char_type, std::char_traits<char_type>> {
    ostreambuf(char_type* buffer, std::streamsize bufferLength) {
        setp(buffer, buffer + bufferLength);
    }
};

Penimbal strim tersuai ini memulakan bahagian dalamannya untuk merujuk penimbal yang disediakan. Untuk menggunakannya:

ostreambuf<char> ostreamBuffer(buffer, size);
std::ostream messageStream(&ostreamBuffer);

messageStream << "Hello" << std::endl;
messageStream << "World!" << std::endl;

Pendekatan ini membenarkan penulisan terus ke penimbal luaran menggunakan perpustakaan IOStream dan std::ostream, mengelakkan penyalinan yang tidak perlu yang terlibat dalam kaedah penyalinan awal.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menulis dengan Cekap kepada Penampan Pra-Peruntukan Menggunakan C Standard Streams?. 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