lower_boud()是C++中一个很好用的二分查找函数,但是我在C#中却一直没有发现这样的函数。(最近发现是有的,见另一篇文章)
最近发现,C#中其实也有这个函数的,不过名字不一样,叫BinarySearch()。很多C#的线性容器都提供了这个方法,比如Array,List等。
这是MSDN中List<T>.BinarySearch()的帮助文档:https://msdn.microsoft.com/zh-cn/library/w4e7fxsh(v=vs.110).aspx
乍一看,这个方法找的是第一个和它相等的元素,这和lower_bound()是不一样,于是我就被骗了很久。。。
最近又仔细看了一下MSDN上的文档,然后发现了这句话:“否则为一个负数,该负数是大于 item 的第一个元素的索引的按位求补。如果没有更大的元素,则为 Count 的按位求补。”
于是真相浮出水面,BinarySearch()其实和lower_bound()是一样的,只是返回值稍有不同,使用时要注意判负数并按位取补。