gpt4 book ai didi

c++ - strstream 和 stringstream 的区别

转载 作者:IT老高 更新时间:2023-10-28 22:21:57 27 4
gpt4 key购买 nike

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


}

最佳答案

来自 <strstream> 的类(class)使用起来很可怕。当它们更受欢迎时,我还没有看到使用任何正确的产品(好吧,当我发现问题时它们得到了纠正)。任何人都没有使用 std::ends 终止字符串或者他们没有使用 s.freeze(0) 释放内存(或者,大多数情况下,两者兼而有之)。虽然 <sstream>类创建一个拷贝我还没有发现这是一个问题。

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

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

关于c++ - strstream 和 stringstream 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13893154/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com