C++ strstream与stringstream的区别

C++ strstream与stringstream的区别,c++,c++11,C++,C++11,我检查了这两个类的实现,发现strstream类已被弃用 如果我使用stringstream类作为替换,那么它们在缓冲区中的登录方式有很大的不同,因为stringstream类对象维护缓冲区的深层副本 用stringstream类替换strstream时,是否有人遇到过任何问题 这段代码的输出是什么?为什么 #include<iostream> #include <sstream> #include <strstream> int main(){

我检查了这两个类的实现,发现strstream类已被弃用

如果我使用
stringstream
类作为替换,那么它们在缓冲区中的登录方式有很大的不同,因为
stringstream
类对象维护缓冲区的深层副本

stringstream
类替换
strstream
时,是否有人遇到过任何问题

这段代码的输出是什么?为什么

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


}
#包括
#包括
#包括
int main(){
char strArr[]=“Soheb Khan很伟大”;
char stringArr[]=“涡轮增压”;
std::strstream strstream(strArr,19);
std::stringstream stringstream(std::string(stringArr,19));
std::cout来自
的类使用起来非常糟糕。当它们更流行时,我没有看到使用任何正确的产品(好吧,当我发现问题时,它们得到了纠正)。要么人们没有使用
std::ends
终止字符串,要么他们没有使用
s.freeze(0)
(或者,大多数情况下,两者都有).虽然
类确实创建了一个副本,但我没有发现这是一个问题

如果内存分配实际上对您的用例很重要,因为您需要分配大的内存块,或者因为您有很多内存块,那么您可以轻松控制并使用自定义流缓冲区从您提供的缓冲区读取或写入数据。例如,流缓冲区写入一个易于分配的内存块是很简单的写:

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