gpt4 book ai didi

c++ - 对排序 vector 进行二分查找

转载 作者:行者123 更新时间:2023-11-28 06:35:46 37 4
gpt4 key购买 nike

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有关。元素 vector 被排序。我想在这个 vector 上找到插入点,如果值恰好在 vector 中,则返回它的索引。此外,例如,大小为 7 的 vector 上有 8 个插入点。我一直遇到段错误,我认为这可能是一个:因一个错误或类似错误而关闭,有人可以帮忙吗?谢谢。

最佳答案

如果 vector 大小为 2,则 min == mid == 0max == 1。在代码中,您检查 mid - 1 处的元素,即 -1,因此您的程序表现出未定义的行为。

关于c++ - 对排序 vector 进行二分查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26810907/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com