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 ?希望得到解释
指向数组可访问元素的指针范围data声明如下
int data[] = {23, 45, 56, 12, 34, 56};
Run Code Online (Sandbox Code Playgroud)
是[data, data + arraySize)。
如果在数组中未找到目标值,则算法将返回一个指向数组最后一个元素之后的内存的指针data + arraySize。否则,算法返回指向数组中找到的元素的指针。
请注意该表达式data或data + 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)