有一个问题,当我们想要遍历整个数组并将数组的每个值与数组中存在的数字进行比较时,比如 arr[0] 那么,为什么建议用 arr[0 初始化一个 int ],比如 int acomp =arr[0] 并将 acomp 与数组中存在的每个整数进行比较,而不是将数组中存在的每个整数与 arr[0] 进行比较? 例如,在下面的 union 代码中有人向我指出代码 2 比代码 1 好,但我不太清楚为什么。
int unionarr(int p, int q){ //Code 1
for(int i=0;i<size;i++)
if(arr[i]==arr[p])
arr[i]=arr[q];}
int unionarr(int p, int q){ //Code 2
int pid=arr[p];
int qid=arr[q];
for(int i=0;i<size;i++)
if(arr[i]==pid)
arr[i]=qid;}
最佳答案
这是一个正确性问题。 for
循环中的赋值可以修改数组值。您可能会修改在比较或赋值右侧使用的元素。这就是为什么您必须在进入循环之前保存它们。
关于c++ - 与阴险的错误联盟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44819365/