![](/img/trans.png)
[英]I can't figure out how to print arrays and in turn, I can't figure out how to swap elements in an array
[英]Can't figure out if two arrays are equal
我試圖找到一種方法來判斷我的一個數組是否長於另一個數組。 我得到了一個函數原型:
template <typename T, typename U> bool equal(T *left, T *end, U *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超出限制以及for循環。
您還需要跟蹤正確的數組的末尾。
模板布爾等於(T *左,T *端,U 右,U end2){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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.