【发布时间】:2019-12-07 02:10:48
【问题描述】:
是否有一种 STL/库方法可以在恒定时间内减小字符串大小(修剪它)。
在 C 中,这可以通过在最后一个索引后面添加 '\0' 来在恒定时间内完成。
C++ 调整大小的复杂性未定义,很可能是 O(N)
【问题讨论】:
-
您从哪里获得这些信息?你有什么证据表明 C 可以在恒定时间内调整字符串的大小?
-
std::string::resize的复杂度在形式上是O(n)。然而,如果您在减小字符串大小时实际检查 C++ 库的实现,您会对该特定操作的实际复杂性感到非常惊讶。 -
是的,它是 O(n)。但它必须是,因为如果新的大小超过容量,它必须重新分配和复制。而且即使只是扩大了字符串,也必须初始化新的部分。当然,如果它没有变得更大,那么工作量是恒定的。顺便说一句:在 C++11 之前的 COW 字符串中,它必须是 O(n),在任何情况下都会由于修改而发生不共享。