我正试图找出一种方法来判断我的一个阵列是否比另一个更长。我得到了一个函数原型:
template <typename T, typename U> bool equal(T *left, T *end, U *right);
其中left是第一个数组,right是第二个数组。 “end”属于第一个数组,它告诉我数组何时结束。当左数组小于第二个数组时,我遇到了一些复杂问题。因为我知道第一个数组的结束位置,所以我试图弄清楚第二个数组值是以值还是垃圾传递。
到目前为止,我有这个:template <typename T, typename U>
bool equal(T *left, T *end, U *right)
{
int i = 0;
while(left + i != end)
{
if(*(left + i) == *(right + i))
{
++i;
continue;
}
else
return false;
}
return true;
}
仅在数组大小相同时才有效。
测试它失败的地方:
static void TestEqual2(void)
{
cout << "***** Equal2 *****" << endl;
int i1[] = {-1, 2, 6, -1, 9, 5, 7};
short i2[] = {-1, 2, 6, -1, 9, 5, 7, -1, -1, 8, -1};
int size1 = sizeof(i1) / sizeof(int);
int size2 = sizeof(i2) / sizeof(short);
CS170::display(i1, i1 + size1);
CS170::display(i2, i2 + size2);
bool same = CS170::equal(i1, i1 + size1, i2);
if (same)
std::cout << "Arrays are equal\n";
else
std::cout << "Arrays are not equal\n";
}
std :: vector不受限制,也适用于循环。
答案 0 :(得分:0)
您还需要跟踪正确数组的结尾。
模板 bool相等(T *左,T *结束,U 右,U 结束2) { int i = 0;
while(left + i != end && right + i != end2)
{
if(*(left + i) == *(right + i))
{
++i;
continue;
}
else
return false;
}
return left + i == end && right + i == end2; // return true only if both arrays have the same length
}
您还需要将对此功能的调用更改为
bool same = CS170::equal(i1, i1 + size1, i2, i2 + size2);