Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+;中修改字符串的BigO时间复杂度是多少+;?_C++_String_Big O - Fatal编程技术网

C++ 在C+;中修改字符串的BigO时间复杂度是多少+;?

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”;//没错,它是常数。根据: 复杂性 不变

修改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”;//没错,它是常数。根据:

复杂性

不变的


对于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”
字符数组。