性能字符串与字符串
performance stringbuf vs string
当我们必须使用字符串操作时,std::string 和 std::stringbuf 之间是否存在任何显着的性能差异,如果是,为什么。
更一般地说,当使用 std::stringbuf 而不是 std::string 时更好?
std::stringbuf
在内部使用字符串来缓冲数据,因此它可能有点慢。我不认为差异会很大,因为它基本上只是委派。为了确保您必须运行一些性能测试。
当您希望 IO 流使用字符串作为缓冲区时,std::stringbuf
很有用(如 std::stringstream
,默认情况下使用 std::stringbuf
)。
首先,std::stringbuf
不一定(甚至通常)使用std::string
进行内部存储。例如,该标准描述了从std::string
初始化,如下所示:
构造类 basic_stringbuf 的对象...然后复制的内容 str 进入basic_stringbuf底层角色序列 [...]
注意措辞:"字符序列" - 至少对我来说,这似乎非常小心,以避免说(甚至暗示)内容应该存储在实际字符串中。
除此之外,我认为效率可能是一个红鲱鱼。它们都是相当薄的包装器,用于管理某种类似字符序列的动态分配缓冲区。功能有很大的不同(例如,string
在字符串中间有很多搜索和插入/删除,而stringbuf
中完全没有)。鉴于其目的,在诸如std::deque
之类的东西上实现stringbuf
可能是有意义的,以优化末端的(通常)插入/删除路径,但这对于大多数用途来说可能是无关紧要的。
如果我这样做,我可能最担心的是stringbuf
可能只与stringstream
一起测试,所以如果我使用它的方式与stringstream
不同,我可能会遇到问题,即使我遵循标准所说的它应该支持的内容。
std::stringbuf
扩展std::string
容器,用于读取和写入std::string
。
通常,std::string
和 std::stringbuf
之间没有显着的性能差异。
因为std::streambuf
<-std::stringbuf
,都是因为:
typedef basic_stringbuf<char> stringbuf;
typedef basic_string<char> string;
阅读此内容以获取更多详细信息。
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 通过默认复制构造函数比较 C++ 字符串是否会影响性能,原因为何?
- 性能 - 使用字符串构造函数与使用串联
- C++和Java的字符串循环性能比较
- 检查从查询返回的任何行是否包含在字符串中的最高性能方法?
- MongoC ++驱动程序BSON构造:基于流与基于字符串解析.哪一个性能更好?
- STD ::移动性能,同时将大字符串作为rvalue
- C++按字符串调用函数,比较PHP的性能,如何在C++中优化代码
- 性能字符串作为函数参数
- C++字符串构造性能
- 字符串操作性能问题
- 字符串与哈希作为映射键 - 性能
- 通过 iStringStream 标记化的 C++ 字符串的性能开销
- 对于静态错误字符串,哪个的内存/性能效率更高,或者有替代方案
- std::用于处理短字符串的字符串性能
- 在将 char 数组复制到字符串期间节省 CPU 周期(提高性能)
- 性能字符串与字符串
- C++代码性能字符串进行比较
- 性能标准::strstr vs. 标准::字符串::查找
- 字符串到flywweights的字符串转换:更好的性能选项