将数组中的所有元素与另一个数组进行比较

时间:2016-06-10 04:28:10

标签: c++ c

所以我很难理解一个相当简单的算法。如果我想比较一个数组中的所有元素到另一个数组,它将如何工作?例如

For ( i = 0; i < size; i++ )
{
     For ( k = 0; k < size; k++)
     { 
          Do something if arrays are the same or not
     }
}

i和k循环都只是在数组中携带相同的插槽。如果我添加一个-1或+ 1,它只会检查最后一个或下一个插槽...但是如果我想检查1到3或整个阵列,那该怎么办。

2 个答案:

答案 0 :(得分:0)

这取决于你的考虑和#34;相同的&#34;。如果您希望它们处于相同的顺序,则可以更简单一些。

for(int i =0; i < size; i++){
    if (arrayOne[i] != arrayTwo[i])
        return false;
    }
}

如果订单无关紧要,可能会有点复杂。

for(int i = 0; i < size; i++){
    int valueFound = 0;
    for(int k = 0; k < size; k++){

        if (arrayOne[i] == arrayTwo[k]){
            valueFound = 1;
        }
    }
    if (valueFound == 0)
        return false;

}
return true;

但这假设数组大小相同。而且它实际上只会检查来自arrayOne的所有值都在arrayTwo内,因此它并不是您正在寻找的内容。我希望这能为你提供一些方向。

答案 1 :(得分:0)

这是不正确的算法。

你可以编写自己的函数,就像这样。 请注意,函数参数中的a[]将被编译器替换为*a

template<typename T>
bool arraycmp(T *a, size_t a_size, T *b, size_t b_size)
{
    if(a_size != b_size) // If sizes is not same, we know that arrays not equal
        return false;


    for(size_t i = 0; i<a_size; ++i)
    {
        if(a[i]!=b[i]) // Just do check, and if array element mismatch return false
            return false;
    }

    return true;
}

或像这样,只有一个size_t

template<typename T>
bool arraycmp(T *a, T *b, size_t size)
{   
    for(size_t i = 0; i<size; ++i)
    {
        if(a[i]!=b[i]) // Just do check, and if array element mismatch return false
            return false;
    }

    return true;
}

或者只使用库函数memcmp