vla*_*koc 41 c++ arrays comparison equality
有人可以向我解释为什么以下代码的输出是说数组不相等?
int main()
{
int iar1[] = {1,2,3,4,5};
int iar2[] = {1,2,3,4,5};
if (iar1 == iar2)
cout << "Arrays are equal.";
else
cout << "Arrays are not equal.";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Pra*_*ian 62
if (iar1 == iar2)
Run Code Online (Sandbox Code Playgroud)
这里iar1并且iar2正在衰减到指向各个数组的第一个元素的指针.由于它们是两个不同的数组,因此指针值当然不同,并且您的比较测试不相等.
要进行元素比较,你必须要写一个循环; 或者std::array改为使用
std::array<int, 5> iar1 {1,2,3,4,5};
std::array<int, 5> iar2 {1,2,3,4,5};
if( iar1 == iar2 ) {
// arrays contents are the same
} else {
// not the same
}
Run Code Online (Sandbox Code Playgroud)
Ins*_*Now 50
由于没有人提及它,您可以将数组与std::equal算法进行比较:
int iar1[] = {1,2,3,4,5};
int iar2[] = {1,2,3,4,5};
if (std::equal(std::begin(iar1), std::end(iar1), std::begin(iar2)))
cout << "Arrays are equal.";
else
cout << "Arrays are not equal.";
Run Code Online (Sandbox Code Playgroud)
你需要包括<algorithm>和<iterator>.如果你还没有使用C++ 11,你可以写:
if (std::equal(iar1, iar1 + sizeof iar1 / sizeof *iar1, iar2))
Run Code Online (Sandbox Code Playgroud)
Fre*_*son 14
您没有比较数组的内容,而是比较数组的地址.由于它们是两个独立的数组,因此它们具有不同的地址.
通过使用更高级别的容器,如避免这个问题std::vector,std::deque或std::array.
没人提memcmp?这也是一个不错的选择。
/* memcmp example */
#include <stdio.h>
#include <string.h>
int main ()
{
char buffer1[] = "DWgaOtP12df0";
char buffer2[] = "DWGAOTP12DF0";
int n;
n=memcmp ( buffer1, buffer2, sizeof(buffer1) );
if (n>0) printf ("'%s' is greater than '%s'.\n",buffer1,buffer2);
else if (n<0) printf ("'%s' is less than '%s'.\n",buffer1,buffer2);
else printf ("'%s' is the same as '%s'.\n",buffer1,buffer2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
参考:http : //www.cplusplus.com/reference/cstring/memcmp/
| 归档时间: |
|
| 查看次数: |
88251 次 |
| 最近记录: |