在 C++ 中比较数组

Compare arrays in C++

我在比较两个数组时遇到一些问题:

int array[3] = {23, 14, 1};

if (array == {12, 43, 1}) {
    // Do something
}

我得到的错误是:

error: expected primary-expression before '{' token

       if (array == {12, 43, 1}) {

                        ^

error: expected ')' before '{' token

我也试过这个:

bool compareArrays(int firstArray[], int secondArray[], int length) {
    for (int i = 0; i < length; i++) {
        if (firstArray[i] != secondArray[i]) {
            return false;
        }
    }

    return true;
}

但是当我这样做时我又遇到了另一个错误:

if (compareArrays(array, {12, 43, 1}, 3)) {
    // Do something
}

error: cannot convert '<brace-enclosed initializer list>' to 'int*' for argument '2' to 'bool compareArrays(int*, int*, int)'

我该如何解决这个问题? 提前致谢。

此声明:

bool compareArrays(int firstArray[], int secondArray[], int length) {

接受指向 int 的指针。但是你不能将 brace-init 列表衰减为指针。

相反,该函数可以接受 fixed-size 个数组,并将它们与算法进行比较:

template<size_t N>
bool compareArrays(int (&firstArray)[N], int (&secondArray)[N]) {
  return std::equal(std::begin(firstArray),std::end(firstArray),
                    std::begin(secondArray));
}

请注意,您不再需要传递 length,因为函数会推导出它。

您可以使用 std::array。使用 C++20 就像

一样简单
#include <array>

int main() {
    int array[3] = {23, 14, 1};

    if (std::to_array(array) == std::array{12, 43, 1}) {
    // Do something
    }
}

或使用 C++17

#include <array>

int main() {
    std::array array = {23, 14, 1};

    if (array == std::array{12, 43, 1}) {
    // Do something
    }
}

只是另一个建议。您可以使用 std::memcmp 来比较元素为 int 或其他 PODs.

的数组