Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menulis dengan Cekap kepada Penampan Tertentu Menggunakan Aliran Rentetan dalam C?

Bagaimanakah Saya Boleh Menulis dengan Cekap kepada Penampan Tertentu Menggunakan Aliran Rentetan dalam C?

Barbara Streisand
Barbara Streisandasal
2024-11-26 08:02:08296semak imbas

How Can I Efficiently Write to a Specific Buffer Using a Stringstream in C  ?

Mengkonfigurasi Strim untuk Menulis kepada Penimbal Tertentu

Apabila menulis data ke penimbal sedia ada menggunakan kelas aliran rentetan, adalah penting untuk mengelakkan penggunaan yang berlebihan meniru. Mekanisme lalai melibatkan penyalinan mesej daripada strim ke objek rentetan sementara, yang boleh menjadi tidak cekap.

Pendekatan Asal dan Hadnya

Pada mulanya, percubaan telah dibuat untuk menggunakan kaedah rdbuf()->pubsetbuf() untuk mengubah hala keluaran strim ke penimbal yang dikehendaki. Walau bagaimanapun, kaedah ini terbukti tidak berkesan dalam pelaksanaan Visual Studio 2008.

Pelaksanaan Streambuf Tersuai

Alternatif yang berdaya maju ialah mencipta kelas std::streambuf tersuai yang memulakannya petunjuk dalaman untuk merujuk kepada yang dibekalkan penimbal:

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

Kod Disemak Menggunakan Streambuf Tersuai

Menggunakan jenis ostreambuf tersuai, kod tersebut ditulis semula seperti berikut:

void FillBuffer(char* buffer, unsigned int size)
{
    ostreambuf<char> ostreamBuffer(buffer, size);
    std::ostream messageStream(&ostreamBuffer);

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

Kini, data ditulis terus ke penimbal luaran tanpa penyalinan yang tidak perlu. Pendekatan ini memberikan kecekapan dan fleksibiliti yang lebih besar apabila bekerja dengan penimbal.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menulis dengan Cekap kepada Penampan Tertentu Menggunakan Aliran Rentetan dalam C?. 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