gpt4 book ai didi

c++ - 在常数时间内修剪 C++ 字符串

转载 作者:行者123 更新时间:2023-11-28 01:14:14 25 4
gpt4 key购买 nike

是否有一种 STL/库方法可以在恒定时间内减小(修剪)字符串大小。

在 C 中,只需在最后一个索引后添加 '\0' 即可在常数时间内完成此操作。

C++ resize compexity 是未定义的,很可能是 O(N)

http://www.cplusplus.com/reference/string/string/resize/

最佳答案

@SamVarshavchik 在评论中含糊其辞,但值得一提的是:在许多实现中,包括 libstdc++,std::string::resize() 将减小常量字符串的大小时间,通过减少字符串的长度而不是重新分配/复制数据: https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/basic_string.tcc . O(n) 的估计是如果你增加大小,强制重新分配和复制字符串。

或者,在 C++17 中,std::string_view 是粗略的不可变对应物,通过拍打空字节来“修剪”C 字符串。它获取字符串的一部分(指针 + 大小)而不复制其内容,然后您可以将它传递给各种 STL 函数或从流中打印它。

std::string hello_world = "hello world";
auto hello = std::string_view(hello_world.data(), 5);
std::cout << hello; // prints hello

需要注意的是 string_view 不拥有数据,所以一旦原始字符串超出范围就不能使用它,并且您不想以可能导致它的方式修改原始字符串重新分配。

关于c++ - 在常数时间内修剪 C++ 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59222417/

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