使用数组作为惠勒循环条件

Using an Array as a Whille loop condition

本文关键字:循环 条件 数组      更新时间:2023-10-16

我试图通过说如果数组不等于数组运行循环来指定一个条件。所以例如:

阵列1 [1,2,3]

阵列2 [1,2,3]

在这里 array1 等于 array2,因为两个数组中 0 中的元素是相同的,两个数组中 1 中的元素是相同的,依此类推......

到目前为止,我的代码似乎不起作用。有没有办法比较两个数组,如果一个数组中的所有元素都与第二个数组中的所有元素匹配,则条件为真。

这是我的测试代码:

int C1Mean[3];
int C2Mean[3];
int prv_mean1[3];
int prv_mean2[3];
while (C1Mean[3] = prv_mean1[3] && C2Mean[3] = prv_mean2[3])
{
    //code
}

谢谢伙计们。

如前所述,您越界访问数组,并且使用赋值(单=)或比较(==)。

要比较数组(逐个元素),可以使用std::equal

while(std::equal(std::begin(C1Mean), std::end(C1Mean), std::begin(prv_mean1))
   && std::equal(std::begin(C2Mean), std::end(C2Mean), std::begin(prv_mean2)))
{
 ...
}

或者没有 c++11 :

while(std::equal(C1Mean, C1Mean + sizeof C1Mean / sizeof *C1Mean, prv_mean1)
   && std::equal(C2Mean, C2Mean + sizeof C2Mean / sizeof *C2Mean, prv_mean2))
{
 ...
}

在 c++11 中,你可以使用 std::array ,并使用 ==

std::array<int, 3> C1Mean;
std::array<int, 3> C2Mean;
std::array<int, 3> prv_mean1;
std::array<int, 3> prv_mean2;
while (C1Mean == prv_mean1 && C2Mean == prv_mean2)
{
    //code
}

您没有使用比较运算符 ( == ) 而是赋值 ( = ),因此您更改了条件中 CMean[i] 的值,并且仅当其中一个等于零时,条件才会为 prv_mean2。不,您无法比较整个数组。

如果你能够使用 c++11,你可以使用泛型函数。泛型函数为:

bool equal(beginIterator, endIterator, beginIterator Other);

此泛型函数将比较范围内的所有值。请注意,第二个数组必须至少与第一个数组一样长。

由于数组是一个对象,因此不能使用 arr.begin (),您应该使用 std::begin(arr) 和 std::end(arr)。这些功能附带 #include。

此外,如果你可以使用 c++11,你也可以使用 standad 容器 std::array 或 std::vector。然后你可以只声明 arr1 == arr2。

注意:我在手机上写了这个,并没有检查通用函数是否真的适用于数组。我会再次在家检查这一点,并最终删除我的帖子。

您可以创建一个函数来比较两个数组,如果它们相等,则返回 1,否则返回 0。例如,

while(areEqual(C1Mean,prv_mean1) && areEqual(C2Mean,prv_mean2))
{
 //Perform your task
}

哪里

int areEqual(int array1[],int array2[])
{
 //compare them and return 1 if equal else return 0;
}

似乎你需要一个双等号("==")。尝试:

while (C1Mean[3] == prv_mean1[3] && C2Mean[3] == prv_mean2[3])
{
    //code
}