首页 > 解决方案 > 检查输入 std::array 指针数据是否等于某个常量数组

问题描述

我有一个可以简化为的函数跟踪:

void foo(const std::array<unsigned long long int, 3>& in)

而且我想检查 in 的值是否是特定的东西(例如{1,1,1}),以便我可以警告/错误。

我已经看到您应该能够在 中使用==and!=运算符std:array,但是以下失败:

if(in.data() == std::array<unsigned long long int, 3>{1,1,1})

因为:

错误:不匹配‘operator==’</code> (operand types are ‘<code>std::array<long long unsigned int,::const_pointer{aka const long long unsigned int*}' 和 '<code>std::array<long long unsigned int,')

我知道这.data()似乎是在返回一个cosnt_pointer,但我不知道如何解决这个问题来做我想做的事。我该如何进行这种比较(除了一个看起来不太 C++y 的幼稚 for 循环)?

标签: c++

解决方案


in指的是 a std::array<unsigned long long int, 3>std::array<unsigned long long int, 3>{1,1,1}也是 a std::array<unsigned long long int, 3>,因此您可以通过以下方式直接比较它们==

if(in == std::array<unsigned long long int, 3>{1,1,1})

如果数组有更多元素,您可能希望使用算法来避免创建第二个数组。类似于(未测试)的东西:

if (in.end() == std::find_if(in.begin(),in.end(),[](auto x){ return x != 1; }))

如果只有三个元素,我可能会简单地写

if (in[0] == 1 && in[1] == 1 && in[2] == 1)

推荐阅读