std::find 在旧数组上

新手上路,请多包涵

如何在旧阵列上执行 std::find 而无需从现有旧阵列创建新的 std::vector / std::array

例如:

 int ar[N];

if ( std::find(ar, ar + N, value) != &ar[N] ){ /**/ }

&ar[N] 是在什么也没找到时检查情况的有效值吗?我可以确定我在使用 &ar[N] 就像 --- 的模拟时 std::vector::end() 对吗?

原文由 fogbit 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 428
2 个回答

如果您使用的是 c++11,则可以使用:

 int arr[N];
if (std::end(arr) == std::find(std::begin(arr), std::end(arr), value))
{
    // ...
}

对于 c++98,您可以使用:

 int arr[N];
int *begin = arr;
int *end = begin + N;

if (end == std::find(begin, end, value))
{
    // ...
}

原文由 utnapistim 发布,翻译遵循 CC BY-SA 3.0 许可协议

你的总体思路很好。但是 ar[N] 不是为您“保留”的。取消引用未分配的变量将导致未定义的行为。您想将 std::find 结果与 ar + N 进行比较,这不涉及取消引用。

原文由 tomahh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题