C++ 中“!= data + arraySize”是什么意思?

Pry*_*has -2 c++ arrays algorithm iterator pointer-arithmetic

我正在寻找一种在数组中找到给定 int 的方法,我找到了这个解决方案

#include <algorithm>
#include <iostream>
using namespace std;

int main() {
  int data[] = {23, 45, 56, 12, 34, 56};
  int target = 56;

  int arraySize = sizeof(data) / sizeof(*data);

  bool isPresent = std::find(data, data + arraySize, target) != data + arraySize;

  if (isPresent) {
    cout << "The element is present";
  } else {
    cout << "The element is not present";
  }
  return 0;
Run Code Online (Sandbox Code Playgroud)

现在我测试了并且它有效,但我想知道为什么在 find() 之后有这个 != data + arraySize ?希望得到解释

Vla*_*cow 5

指向数组可访问元素的指针范围data声明如下

int data[] = {23, 45, 56, 12, 34, 56};
Run Code Online (Sandbox Code Playgroud)

[data, data + arraySize)

如果在数组中未找到目标值,则算法将返回一个指向数组最后一个元素之后的内存的指针data + arraySize。否则,算法返回指向数组中找到的元素的指针。

请注意该表达式datadata + 0指向数组数据的第一个元素。表达式data + 1指向数组的第二个元素。这是一个类似data + i指向i-th数组元素的表达式。

此行将更具可读性

bool isPresent = std::find(data, data + arraySize, target) != data + arraySize;
Run Code Online (Sandbox Code Playgroud)

如果重写它

#include <iterator>

//...
bool isPresent = std::find( std::begin( data ), std::end( data ), target ) != std::end( data );
Run Code Online (Sandbox Code Playgroud)