C++ 性能字符串buf vs string

C++ 性能字符串buf vs string,c++,string,C++,String,当我们必须处理字符串操作时,std::string和std::stringbuf之间是否存在显著的性能差异,如果是,原因是什么 更一般地说,当使用std::stringbuf优于std::string时?Astd::stringbuf在内部使用字符串来缓冲数据,因此可能会稍微慢一点。我不认为这有什么区别,因为这基本上只是授权。不过,为了确保这一点,您必须运行一些性能测试 std::stringbuf在希望IO流使用字符串作为缓冲区时非常有用(例如std::stringstream,默认情况下使用

当我们必须处理字符串操作时,std::string和std::stringbuf之间是否存在显著的性能差异,如果是,原因是什么


更一般地说,当使用std::stringbuf优于std::string时?

A
std::stringbuf
在内部使用字符串来缓冲数据,因此可能会稍微慢一点。我不认为这有什么区别,因为这基本上只是授权。不过,为了确保这一点,您必须运行一些性能测试


std::stringbuf
在希望IO流使用字符串作为缓冲区时非常有用(例如
std::stringstream
,默认情况下使用
std::stringbuf

首先,
std::stringbuf
不一定(甚至通常)使用
std::stringbuf
作为其内部存储。例如,该标准描述了从
std::string
进行初始化,如下所示:

构造类basic_stringbuf的对象。。。然后复制 str转换为基本字符序列[…]

注意措辞:“字符序列”——至少对我来说,这似乎相当谨慎,避免说(甚至暗示)内容应该存储在实际字符串中

除此之外,我认为效率可能是一个骗局。它们都是相当薄的包装器,用于管理某种类似字符序列的动态分配缓冲区。在功能上有很大的差异(例如,<代码>字符串在字符串的中间有大量的搜索和插入/删除,这些代码完全不存在于<代码> String Buff)。考虑到它的用途,在像
std::deque
这样的东西上实现
stringbuf
可能是有意义的,以优化末端插入/删除的(通常)路径,但对于大多数用途来说,这可能是不实际的


如果我这样做,我可能最担心的是
stringbuf
可能只与
stringstream
一起测试,因此如果我使用它与
stringstream
不同,我可能会遇到问题,即使我遵循标准所说的,它也应该支持。

std::stringbuf
扩展了
std::string
容器,用于读取和写入
std::string

通常,
std::string
std::stringbuf
之间没有显著的性能差异


因为
std::streambuf
这个问题仍然没有答案:是否存在任何显著的性能差异。按照你的逻辑:
std::string
内部使用
char
数组,所以不,你应该坚持使用
char
数组。我实际上会问另一个问题:当
string
有更多可用的方法时,为什么要使用
stringbuf
,受虐狂?我想你来自java或者C语言,他们的StrugBuudBER类工作在……MattheUn:不,我是C++程序员,但是是的,为什么OSTRIGWORD使用内部StrugBuf而不是Struts完全不同。从
ostream
派生的所有类都使用从派生的缓冲区,因此
stringbuf
只是从
streambuf
继承的
string
的包装器,因此可以在那里使用。适配器或桥接模式的典型应用。@MatthieuM.:好的,谢谢!重读我自己。。。这个问题让我很惊讶,因为我不明白你为什么会提出这个问题,但我表示惊讶的表情可能被认为是严厉或殴打。如果是这样,我道歉。在有疑问时提出问题是一种进步的好方法。
typedef basic_stringbuf<char> stringbuf;    
typedef basic_string<char> string;