首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >字符串类擦除成员函数的C++时空复杂度

字符串类擦除成员函数的C++时空复杂度
EN

Stack Overflow用户
提问于 2018-10-18 11:22:36
回答 1查看 3.5K关注 0票数 8

我想知道是否有人知道C++ string::erase函数的实现以及它的复杂性。我知道C++字符串是一个字符对象。我假设它不会分配和创建一个新的字符对象,然后从旧的字符串O(n)和O(n)空间复制字符。它是否在字符O(n)和O(1)空间上移动?我看过cplusplus.com和Bjarne Stroustrup的书,但没有找到答案。有人能告诉我它是在哪里实现的源代码,或者知道答案吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-10-23 03:38:45

作为stated in the comments,该标准没有为许多basic_string函数(包括erase)指定任何复杂性要求。这在一定程度上是因为历史上有许多不同的实现策略(最著名的是,写入时复制在C++98时代很流行),所以委员会不愿太精确地指定任何东西。

典型的现代实现的basic behavior非常类似于vector<char>:插入和删除在结束时很便宜(通过分期重新分配),在开始时很昂贵。处理小字符串时根本不需要内存分配(通过重用指针的空间来存储字符)。这意味着,如果字符串变得非常短,擦除可能会导致复制整个字符串(但复制成本很低)。这也意味着迭代器和引用是无效的vector更容易。

没有任何算法在string上执行得更好,但是有一些替代的数据结构具有不同的性能特征。rope的典型之处在于,它提供的访问速度稍慢,但插入和删除速度要快得多。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52866539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档