c++ - 检查输入 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
{akaconst long long unsigned int*
}' 和 '<code>std::array<long long unsigned int,')
我知道这.data()
似乎是在返回一个cosnt_pointer
,但我不知道如何解决这个问题来做我想做的事。我该如何进行这种比较(除了一个看起来不太 C++y 的幼稚 for 循环)?
解决方案
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)
推荐阅读
- python - 如何从 Python 中的 Alpha Vantage 中提取特定时间段?
- javascript - 在 javascript 中键入检查自定义对象
- postgresql - 序列迁移不适用于 ASP.NET Core 2.1
- c# - 尝试将指定内容添加到令牌返回“Newtonsoft.Json.Linq.JProperty 不能有多个值。”
- reactjs - 在函数内使用 Router 组件做出反应
- python - 使用 pyspark 并行化排序算法
- c++ - 如何在 MinGW 中更改语言环境
- react-native - 如何在 Visual Studio 2017 的 UWP 中安装 react-native-windows?
- javascript - 当以编程方式更改值时如何在文本输入上触发 onChange 事件 - 反应
- java - 关于伯克利数据结构免费在线课程(CS61B)关于Java中静态变量的教程问题