stl大法好
stl二分常用的有三个容器。
分别介绍一下:
upper_lound(数组首地址,数组尾地址,查找的数A);
lower_lound(数组首地址,数组尾地址,查找的数A);
这两个容器返回值都是地址。
upper_lound的返回值是数组里面第一个大于A的那个位置的地址。
lower_lound的返回值是数组里面第一个大于等于A的那个位置的地址。
注:
返回值都是地址。如果想要那个位置的下标。则可以将返回的地址减去数组首地址即可以得到。并且这两个容器的用途都是用于非递减的数组中。
还有一个查找数A在数组中是否出现过的容器。
binary_search(数组首地址,数组尾地址,查找的数A);
如果要查找的数A在数组中,则这个容器返回1;
如果要查找的数不在数组中,则这个容器返回0;
上面介绍的都是在数组是非递减的情况下。
那么如果我们是要在非递增数组中使用呢?
1,重载。
2,容器其实默认的是有4个参数的,省掉第四个参数(即默认为非递减序列)
如果将第四个参数加上,则这些容器可在非递增序列使用(同时大于变小于,大于等于变小于等于)。
格式:
upper_lound(数组首地址,数组尾地址,查找的数A,greater () );
具体代码:
#include"string.h"
#include"functional"
#include