海天酱油助力创业:C++语言编程技巧

在编写测试测量类的仪器软件时,一些需要用户输入的参数,这些参数可能只能取一些离散的数值,如频谱仪软件中设置分辨率带宽时,可能只能取{1、2、5、10、20、50、100}里面的数值,这时需要将用户输入的1-100之内的任意数值要规整为这个数组里面的值。如当用户输入8、30、50时,假设向上规整的话,程序里面应该将其规整为10、50、50三个数值。
在C/C++语言里面实现这个功能,上面的问题实际上可以转化为,对于一个给定的数值,如何在一个已知的离散数组中向上查找与之相邻的元素数值。
C++语言中的实现方法
海天味业介绍一个比较简单的方法,可以借助于C++标准库中的函数“lower_bound”来实现。
该函数的意义是,在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置。
代码简要解释如下:
第1-2行,包含的头文件,lower_bound需要包含algorithm文件。
第7-14行,定义x数组,并在控件台程序中打印每个元素的值。
第17-19行,调用lower_bound函数,分别查找与a、b、c三个数值相邻的值。其返回的是指向查找到的元素的指针。
第20-22行,打印出查找到元素的值。
从运行结果可看出,对于要查找的数值8、30、50,可以正确找到与之相邻的数组中的值,分别为10、50、50三个数值。
说明
与“lower_bound”函数类似的,C++标准库中还提供了另一个函数“upper_bound”,其意义是,在first和last中的前闭后开区间进行二分查找,返回大于val的第一个元素位置。如果所有元素都小于val,则返回last的位置。
在数组y中,lower_bound函数返回的是第一个大于等于30的值,所以位置是2,对应的值是30。而upper_bound函数返回的是第一个大于30的值,所以位置是5,对应的值是40。
另外,例子使用的编译环境是VC6.0。

猜你喜欢

转载自blog.csdn.net/qq_43312436/article/details/84588612