Разница между strstream и stringstream - программирование

Разница между strstream и stringstream

Я проходил эти два класса реализации и выяснил, что класс strstream устарел.

И если я использую класс stringstream в качестве замены, то существует большая разница между тем, как они регистрируются в буфере, поскольку объект класса stringstream поддерживает глубокую копию буфера.

Кто-нибудь сталкивался с какой-либо проблемой при замене strstream на класс stringstream?

Каким будет выход этого кода и почему?

#include<iostream>
#include <sstream>
#include <strstream>



int main(){

    char strArr[] = "Soheb Khan is great";

    char stringArr[] = "TurboCharging";

    std::strstream strStream(strArr,19);

    std::stringstream stringStream(std::string(stringArr,19));

    std::cout<<"Before Modification strArr= "<<strArr<<" & stringArr= "<<stringArr<<std::endl;

    strStream << "Fifa 2012 is nice";


    stringStream << "Sometimes its sucks";


    std::cout<<"After Modification strArr= "<<strArr<<" & stringArr= "<<stringArr<<std::endl;

    return 0;


}
4b9b3361

Ответ 1

Классы из <strstream> являются отвратительными для использования. Когда они были более популярными, я не видел никакого правильного производства (ну, они были исправлены, когда я обнаружил проблемы). Либо люди не завершили строку с помощью std::ends, либо не освободили память, используя s.freeze(0) (или, чаще всего, оба). Хотя класс <sstream> создает копию, я не нашел, что это проблема.

В случае, если распределение памяти действительно имеет значение для вашего прецедента, либо потому, что вам нужно выделять большие куски, либо потому, что у вас их много, вы можете легко управлять и считывать данные или записывать их в буферы, которые вы предоставляете, используя настраиваемый поток буфер. Например, запись буфера потока для быстрого выделения блока памяти тривиально:

struct omembuf
    : std::streambuf {
{
    omembuf(char* base, std::size_t size) {
        this->setp(base, base + size);
    }
    char* begin() const { return this->pbase(); }
    char* end() const { return this->pptr(); }
};