在 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.
的数组
我在比较两个数组时遇到一些问题:
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.
的数组