使用数组作为 While 循环条件

Using an Array as a Whille loop condition

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

array1 [1,2,3]

array2 [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
}

谢谢大家。

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

看来你需要一个双等号(“==”)。尝试:

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

在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
}

如评论所述,您越界访问了数组,并且您使用的是赋值(单个 =)或比较(==)。

要比较您的数组(逐个元素),您可以使用 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,则可以使用泛型函数。通用函数是:

bool equal(beginIterator, endIterator, beginIterator Other);

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

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

此外,如果您可以使用 c++11,您还可以使用标准容器 std::array 或 std::vector。然后你可以声明 arr1 == arr2.

注意:我在手机上写了这篇文章,并没有检查通用函数是否真的适用于数组。我会在家里再次检查并最终删除我的 post.

您可以创建一个函数来比较两个数组,如果它们相等,则 return 为 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;
}