【问题标题】:Difference between strstream and stringstreamstrstream 和 stringstream 的区别
【发布时间】:2012-12-15 14:42:16
【问题描述】:

我正在查看这两个类的实现,发现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;


}

【问题讨论】:

    标签: c++ c++11


    【解决方案1】:

    &lt;strstream&gt; 的类很难用。当它们更受欢迎时,我没有看到使用任何正确的产品(嗯,当我发现问题时它们得到了纠正)。要么人们没有使用std::ends 终止字符串,要么他们没有使用s.freeze(0) 释放内存(或者,大多数情况下,两者都使用)。虽然&lt;sstream&gt; 类确实创建了一个副本,但我还没有发现这是一个问题。

    如果内存分配对您的用例确实很重要,无论是因为您需要分配大块还是因为您有很多块,您都可以轻松控制并使用自定义流从您提供的缓冲区读取或写入数据缓冲。例如,写入易于分配的内存块的流缓冲区很容易写入:

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

    【讨论】:

      猜你喜欢
      • 2012-08-24
      • 1970-01-01
      • 2012-11-13
      • 2011-05-08
      • 2011-03-18
      • 1970-01-01
      • 2013-04-28
      • 1970-01-01
      • 2013-08-07
      相关资源
      最近更新 更多