2016-06-10 206 views
0

所以我很難理解一個相當簡單的算法。如果我想比較一個數組中的所有元素到另一個數組,它將如何工作?例如比較陣列中的所有元素與另一個陣列

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或整個陣列,最好如何。

+0

對於陣列'A'用'i'索引,你正在比較從'k = 0'到'k

+0

如果你使用['std :: array'](http://en.cppreference.com/w/cpp/container/array)它有它[比較「內置」](http://en.cppreference.com/w/cpp/container/array/operator_cmp)。 –

+1

問題是:數組中的元素是否以相同的順序排列?如果是,那麼你只需要一個循環。如果不是,那麼您需要一個額外的數組來跟蹤'k'數組中的哪些項目已被使用。要麼,要麼排列數組,以便它們*的排列順序相同。 – user3386109

回答

0

這真的取決於你認爲「相同」。如果你希望它們的順序相同,它可以更簡單一些。

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