26.3.2 单元测试

好吧,已经说得够多了!让我们来尝试一个实际的例子吧:测试一个二分搜索。下面的描述来自ISO标准(见25.3.3.4节):

要求:[first,last)之间所有元素e按表达式e<value和!(value<e)或comp(e,value)和!comp(value,e)划分。并且,对[first,last)之间所有元素e来说,e<value意味着!(value<e),comp(e,value)意味着!comp(value,e)。

返回:如果位于区间[first,last)内的一个迭代器i满足如下条件:!(*i<value)&&!(value<*i)或comp(*i,value)==false&&comp(value,*i)==false,函数返回真。

复杂度:最多log(last-first)+2次比较。

没有经验的人很难读懂上述形式化定义(好吧,只是半形式化的)。但是如果你已经真正完成了本章开头我们所强烈建议的二分搜索编程练习的话,你就会对如何实现二分搜索并测试它有一些很好的想法。这个(标准)版本接受三个参数:两个前向迭代器(见15.10.1节)和一个数值。如果数值出现在两个迭代器限定的范围内,函数就返回真。两个迭代器必须对应一个有序序列。比较(排序)操作通过运算符<完成。我们可以为binary_search增加一个参数——比较操作函数,这样就可以用用户指定的任意比较操作进行二分搜索了,我们将此作为练习。

在这里,我们只处理编译器不能发现的错误。因此,类似下面的问题不再考虑: ...

Get C++程序设计:原理与实践(进阶篇)(原书第2版) now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.