<分区>
在下面的程序中
#include <iostream>
bool contains ( int * sarr, size_t n, int i ) // checks whether the integer i is in the sorted array sarr of length n
{
int * pa = sarr; int * pb = sarr + n;
if (pa == pb) return false; // empty array
--pb;
while (pa != pb)
{
if (*pa == i || *pb == i) return true;
int * pc = (pa + pb)/2;
if (*pc < i)
pa = pc;
else
pb = pc;
}
if (*pa == i || *pb == i)
return true;
else
return false;
}
int main ()
{
int arr [] = {1, 1, 6, 10, 19, 22, 22, 22, 50};
std::cout << contains(arr, sizeof(arr)/sizeof(int), 6); // should print 1
return 0;
}
编译器出错
error: invalid operands of types 'int*' and 'int*' to binary 'operator+'
在线
int * pc = (pa + pb)/2;
这是为什么呢?我认为添加指针是完全有效的。或者我需要在右侧进行一些石膏固定吗?
如何在继续涵盖所有极端情况的同时使该算法更加紧凑和高效?
此外,我将其标记为 C 和 C++,因为它是 C 风格的 C++。