C++ |使用 std::mismatch(或其他 STL 替代方法)比较两个数组
C++ | Comparing two arrays using std::mismatch (or another STL alternative)
我面临着比较两个 int
数据类型的 C++ 数组的任务。我特别不能使用我自己的任何循环(for
、while
),并被鼓励使用 STL 函数。我找到了 std::mismatch()
,这似乎是我想要的,但我无法让它与基本数组一起工作。
这是我的代码:
#include <iostream> // cout
#include <algorithm> // std::mismatch
#include <utility> // pair
int main()
{
int a[10] = {1,3,5,7,9,11,13,15,17,19};
int b[10] = {2,4,6,8,10,12,14,16,18,20};
std::pair<int, int> result =
std::mismatch(a, a + 9, b);
std::cout<<result.first<<" "<<result.second<<std::endl;
return 0;
}
我收到以下错误:
error: conversion from 'std::pair' to non-scalar type 'std::pair' requested
我是 C++ 的新手,所以我真的不知道这意味着什么。
std::mismatch()
returns std::pair
个迭代器。在您的示例中,您正在使用 int*
类型的迭代器(int[]
数组 decays 指向指向其第一个元素的 int*
指针)。因此,您需要将 result
变量从 pair<int, int>
更改为 pair<int*, int*>
。然后你需要在将它们的值打印到 cout
时取消引用这些迭代器,例如:
#include <iostream> // cout
#include <algorithm> // std::mismatch
#include <utility> // pair
int main()
{
int a[10] = {1,3,5,7,9,11,13,15,17,19};
int b[10] = {2,4,6,8,10,12,14,16,18,20};
int *a_end = a + 10;
std::pair<int*, int*> result = std::mismatch(a, a_end, b);
if (result.first != a_end)
std::cout << *(result.first) << " " << *(result.second) << std::endl;
else
std::cout << "no mismatch found" << std::endl;
return 0;
}
std::mismatch
returns 一对指向容器的迭代器,而不是一对 int
。在这种情况下,由于您有一个数组,因此迭代器类型为 int*
.
简单的解决方案是在调用它时推导类型:
auto result = std::mismatch(a, a + 9, b);
从 c++17 开始,您也可以命名该对的各个元素:
auto [i, j] = std::mismatch(a, a + 9, b);
我面临着比较两个 int
数据类型的 C++ 数组的任务。我特别不能使用我自己的任何循环(for
、while
),并被鼓励使用 STL 函数。我找到了 std::mismatch()
,这似乎是我想要的,但我无法让它与基本数组一起工作。
这是我的代码:
#include <iostream> // cout
#include <algorithm> // std::mismatch
#include <utility> // pair
int main()
{
int a[10] = {1,3,5,7,9,11,13,15,17,19};
int b[10] = {2,4,6,8,10,12,14,16,18,20};
std::pair<int, int> result =
std::mismatch(a, a + 9, b);
std::cout<<result.first<<" "<<result.second<<std::endl;
return 0;
}
我收到以下错误:
error: conversion from 'std::pair' to non-scalar type 'std::pair' requested
我是 C++ 的新手,所以我真的不知道这意味着什么。
std::mismatch()
returns std::pair
个迭代器。在您的示例中,您正在使用 int*
类型的迭代器(int[]
数组 decays 指向指向其第一个元素的 int*
指针)。因此,您需要将 result
变量从 pair<int, int>
更改为 pair<int*, int*>
。然后你需要在将它们的值打印到 cout
时取消引用这些迭代器,例如:
#include <iostream> // cout
#include <algorithm> // std::mismatch
#include <utility> // pair
int main()
{
int a[10] = {1,3,5,7,9,11,13,15,17,19};
int b[10] = {2,4,6,8,10,12,14,16,18,20};
int *a_end = a + 10;
std::pair<int*, int*> result = std::mismatch(a, a_end, b);
if (result.first != a_end)
std::cout << *(result.first) << " " << *(result.second) << std::endl;
else
std::cout << "no mismatch found" << std::endl;
return 0;
}
std::mismatch
returns 一对指向容器的迭代器,而不是一对 int
。在这种情况下,由于您有一个数组,因此迭代器类型为 int*
.
简单的解决方案是在调用它时推导类型:
auto result = std::mismatch(a, a + 9, b);
从 c++17 开始,您也可以命名该对的各个元素:
auto [i, j] = std::mismatch(a, a + 9, b);