[Error] request for member 'size' in 'arr', which is of non-class type 'int*'
提示第三行,16
int main(int *arr,int target){
int left=0;
int right=arr.size() - 1;
while(left <= right){
int target==arr.size() - 1;
int mid==left + (left - right)/2
if(target==arr.[mid]){
return mid;
}
else if(target > arr.[mid]){
right=mid + 1;
}
else if(target < arr.[mid]){
left=mid - 1;
}
}
return -1;
}
想知道怎么解决
有几处问题:
1.首先一个程序里只能有一个主函数,看你这个代码应该是想写一个二分查找的算法并返回查找到的那个元素的下标。你可以把函数名改掉然后在主函数里调用。(当然如果你是在c++中的类中,那这种写法是没有问题的)
2.size()这个函数是对c++中的STL容器用的,在这里用会报错的。一般求数组是用sizeof,(格式:sizeof(数组名)/sizeof(数组元素的数据类型),而且这里数组名还是不能以形参的形式出现,因为数组作为形参传递相当于传递给指针,而sizeof(指针名)是计算指针的字节大小(8个字节 64位系统),反正不管怎样你这样写都是不对的。
建议:这边建议你用vector对象进行传递,那样的话可以用size()指示数组长度,你也可以在输入数组的地方用sizeof先计算好,然后再把计算好的长度以参数形式传递过来就OK了。
3.你right和left都给搞反了,应该是right - left,还有下面应该是left = mid + 1,right = mid - 1,还有就是可以直接写成int mid = (right + left)/2就行了看着简单点直观点,而且那个/2可以换成位运算>>1,运行更快
用main作自定义函数名,你是认真的吗
int main(int *arr,int target) 主函数的形参是有固定的格式的,不是随意定义的。看代码是实现二分查找功能的函数,把函数换个名字,比如int fun(int *arr, int target) ,然后再在主函数里调用这个fun()函数。