我认为这可能有点矫枉过正,但我只是好奇。一般来说(如果有一般性答案),假设字符串在50%的时间内彼此相等则更快:
void UpdateString1(string str1, string str2)
{
str1 = str2;
}
void UpdateString2(string str1, string str2)
{
if (str1 != str2)
{
str1 = str2;
}
}
答案 0 :(得分:1)
假设您的假设语言!=
表示“比较”而=
表示“复制”......
我要说UpdateString1
总是至少一样快。
假设字符串不相等。然后UpdateString2
执行比较以及分配。所以它做了额外的工作。
假设字符串相等。然后比较涉及迭代两个字符串中的每个字符并进行比较。那就是O(n)。同样,在最坏的情况下,复制将涉及访问一个字符串中的每个字符并将其复制到第二个字符串。也是O(n)。所以同样的复杂性。同样数量的内存访问。
但是你也得到了不相等的字符串的部分比较成本。我认为这有利于复制。
假设!=
和=
只是按身份比较或更新引用,而不是按值...
所有操作都是O(1)并且费用相同。 =
是100%的一次操作。如果字符串在50%的时间内相等,则!=
/ =
是预期的1.5次操作。
答案 1 :(得分:0)
如果您真的想检查str1!= str2,请使用str1 = str2;
。