以下是我的代码中一个二分片段,目的是求出结构体数组中从 i+1 到 n−1 中第一次出现字符串 s 的位置。先不管具体正不正确,但是我发现,在 while 循环结束时,l 和 r 的值都是发生正常改变的,都有一个赋值成了 mid,但是在下一次循环开始时,l 和 r 又变成了上次循环原来的值,导致运行时错误,为啥?
以下是代码:
int ef(int i,string s){
int l=i+1,r=n-1;
if(a[r].a<s)return -1;
if(a[l].a>s)return -1;
while(l+1<r){
int mid=(l+r)/2;
if(a[mid].a>=s)r=mid;
else l=mid;
}
return r;
}
已经确定结构体数组 a.a 为字符串,并且 i 没有越界。玄关。