设
array1
和 array2
是两个结构实例数组,使用 malloc 数组函数分配。
array1_totlength
和 array2_totlength
是数组中元素的数量。
我想对
func1()
的每个元素执行操作array1
,除了array2
中的元素。
for (int bl= 0; bl < array1_totlength; bl++)
{
/* If this element is in array_2, skip it.*/
for (int l= 0; l < array2_totlength; l++)
{
if (array2[l] == array1[bl])
{?????}
}
func1(array1[bl]);
}
注意这是问题的简化版;在我的实际情况下,
array2
的每个元素都有一个指向 array1
元素的指针。代码向 array2
添加了一个新元素(通过内存重新分配),它的指针指向相应的 array1
元素。我需要跳过创建已经指向的元素;另一种方法是完全废弃 array2
并从头开始制作,但我不倾向于这个选项,因为如果我以前做过的话,再做一遍是没有意义的,它只会不必要地减慢程序。
例如你可以写
for ( int bl = 0; bl < array1_totlength; bl++ )
{
/* If this element is in array_2, skip it.*/
int l = 0;
while ( l != array2_totlength && array2[l] != array1[bl] ) ++l;
if ( l == array2_totlength ) func1(array1[bl]);
}
要解决您的问题,您可以执行以下操作
for (int bl = 0; bl < array1_totlength; bl++)
{
/* If this element is in array_2, skip it. */
for (int l = 0; l < array2_totlength; l++)
{
if (array2[l] == array1[bl])
{continue;}
else{
func1(array1[bl]);
}
}
}
只需使用一个变量来指示是否找到。这有效,也向阅读代码的任何人发出意图信号。
for (int bl= 0; bl < array1_totlength; bl++)
{
bool found = false;
/* Search for the element in array_2 */
for (int l= 0; l < array2_totlength; l++)
{
if (array2[l] == array1[bl])
{
found = true;
break; /* stop searching */
}
}
if (!found) {
func1(array1[bl]);
}
}