template <class T, class C>
size_t idx(const std::vector< T >& elements, const C& val)
{
if (val<elements[0]||val==elements[0])
return 0;
int s=elements.size();
if (val>elements[s-1])
return s;
int min=0;
int max=s-1;
int mid;
while (max >= min){
mid=(max+min)/2;
if (val<elements[min])
return min;
else if (val>elements[max])
return max+1;
else if((val==elements[mid])||((val>elements[mid-1])&&(val<elements[mid])))
return mid;
else if((val>elements[mid])&&(val<elements[mid+1]))
return mid+1;
else if (val>elements[mid+1])
min=mid+1;
else
max=mid-1;
}
return max;
}
这与btree
有关。元素矢量排序。我想在这个向量上找到插入点,如果值恰好在向量中,则返回它的索引。此外,例如,在矢量大小上有8个插入点:7。我一直遇到段错误,我认为这可能是:关闭一个错误或类似错误,有人可以帮忙吗?感谢。
答案 0 :(得分:1)
如果矢量大小为2,则min == mid == 0
和max == 1
。在代码中,您检查mid - 1
处的元素,即-1
,因此您的程序会显示未定义的行为。