gpt4 book ai didi

c++ - C++ 中 str.substr() 的空间复杂度

转载 作者:行者123 更新时间:2023-12-02 09:47:56 26 4
gpt4 key购买 nike

str.substr() 函数的空间复杂度是多少?它与 str.erase() 相比如何?

想知道是因为我在 leetcode 上运行代码,并且在使用 substr 函数时使用了 150MB 内存:

num = num.substr(1,num.size());
一旦我删除了这个函数,而是使用了删除函数,而在我的代码中没有改变任何其他内容,内存使用量下降到 6.8MB。更新了带有删除功能的代码:
num = num.erase(0,1);

最佳答案

num = num.substr(1,num.size());

substr 创建一个没有第一个字符的字符串拷贝,因此在调用后的 1 个字符中,您(几乎)是初始字符串的两倍
(1) 字符串是共享的,因此在分配之后,如果初始字符串没有从其他地方引用,则将其删除,但在分配之前,您在内存中有两个版本需要内存。
num = num.erase(0,1);

修改字符串,因此在执行期间只需要一个版本的字符串
注意它和做的一样
num.erase(0,1);

(1):来自 Pete Becker 的评论,自 C++11 以来 std::basic_string 的内部表示明确不允许共享

关于c++ - C++ 中 str.substr() 的空间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63503371/

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