我正在通过这两个类实现,发现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;
}
Run Code Online (Sandbox Code Playgroud)
这些类<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(); }
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11221 次 |
| 最近记录: |