C++ 在C+;中修改字符串的BigO时间复杂度是多少+;?
修改std::string的运行时是什么?我假设时间是恒定的,或者在string类中有更多的事情发生吗C++ 在C+;中修改字符串的BigO时间复杂度是多少+;?,c++,string,big-o,C++,String,Big O,修改std::string的运行时是什么?我假设时间是恒定的,或者在string类中有更多的事情发生吗 #include <string> int main() { std::string str = "Hello World!" str[1] = 'a'; // <--- what is the runtime? } #包括 int main(){ std::string str=“你好,世界!” str[1]=“a”;//没错,它是常数。根据: 复杂性 不变
#include <string>
int main() {
std::string str = "Hello World!"
str[1] = 'a'; // <--- what is the runtime?
}
#包括
int main(){
std::string str=“你好,世界!”
str[1]=“a”;//没错,它是常数。根据:
复杂性
不变的
对于C++11,也就是说,对于C++98,它是未指定的,但我不会假设使用非常量std::string::operator[]
的内插是常见的。它的复杂性是O(1)。与其对该问题投反对票,不如指出该信息的存储位置,以便人们将来可以轻松查找。只是说。现在我知道了,多亏了Blaze的回答。我没有对你的问题投反对票。你可能想添加“作为字符串长度的函数”和/或“作为索引的函数”,以明确您询问的是哪一个。此外,您还应明确您询问的是单个字符的替换。当您删除/添加字符时,答案会发生变化。(不过,我也不是向下投票人。)@我个人认为,即使没有添加,这个问题也可以。在我看来,这就像是一个“只是为了好玩”的否决票。早在2005年,写std::string时拷贝很普遍。GCC 3.4也有IIRC。哦,哇,这很有趣。感谢分享这个小消息。当时没有可变字符串有什么特别的原因吗“具有可变字符串”-但它们是可变的…与其立即复制字符串数据,具有相同内容的字符串可能会共享它。需要引用计数,并且字符串将在不早于修改数据时创建数据副本(当然,引用计数大于1…)@Blaze示例:std::string s(“hello world”);std::string c(s)
–此时,c
尚未复制内部数据,但与s
共享公共数据。只有当两者中的一个都被修改时,这一个将创建所需的副本,而另一个将保留原始数据。啊,好吧。因此这是一种性能折衷。在该示例中,s
甚至可以保留指向或的指针原始只读“hello world”
字符数组。