所以我很难理解一个相当简单的算法。如果我想比较一个数组中的所有元素到另一个数组,它将如何工作?例如
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 :(得分: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