Comparing arrays for equality in C++ Comparing arrays for equality in C++ arrays arrays

Comparing arrays for equality in C++


if (iar1 == iar2)

Here iar1 and iar2 are decaying to pointers to the first elements of the respective arrays. Since they are two distinct arrays, the pointer values are, of course, different and your comparison tests not equal.

To do an element-wise comparison, you must either write a loop; or use std::array instead

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}


Since nobody mentioned it yet, you can compare arrays with the std::equal algorithm:

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.";

You need to include <algorithm> and <iterator>. If you don't use C++11 yet, you can write:

if (std::equal(iar1, iar1 + sizeof iar1 / sizeof *iar1, iar2))


You're not comparing the contents of the arrays, you're comparing the addresses of the arrays. Since they're two separate arrays, they have different addresses.

Avoid this problem by using higher-level containers, such as std::vector, std::deque, or std::array.