2012-12-15 8 views
14

Przechodziłem przez te dwie klasy implementacji i okazało się, że klasa strstream jest przestarzała.Różnica między strumieniem strstream i stringami

Jeśli używam klasy stringstream jako zamiennika, to jest duża różnica między tym, jak logują się do bufora, ponieważ obiekt klasy stringstream zachowuje głęboką kopię bufora.

Czy ktoś napotkał jakiś problem podczas zastępowania klasy strstream klasą stringstream?

Jaki byłby wynik tego kodu i dlaczego?

#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; 


} 

Odpowiedz

8

Klasy od <strstream> są ohydne w użyciu. Kiedy byli bardziej popularni, nie widziałem żadnej prawidłowej produkcji (cóż, dostali poprawki, gdy zauważyłem problemy). Albo ludzie nie przerywali ciągu znaków za pomocą std::ends lub nie zwolnili pamięci przy użyciu s.freeze(0) (lub, najczęściej, obu). Mimo że klasa <sstream> tworzy kopię, nie uważam tego za problem.

Jeśli alokacja pamięci ma znaczenie dla Twojego przypadku użycia, ponieważ musisz przydzielić duże porcje lub masz ich wiele, możesz łatwo przejąć kontrolę i mieć dane odczytane lub zapisane w buforach dostarczanych za pomocą niestandardowych bufor strumieniowy. Na przykład zapisywanie bufora strumieniowego w celu łatwego przydzielenia fragmentu pamięci jest banalnie proste:

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(); } 
}; 
Powiązane problemy