回 帖 发 新 帖 刷新版面

主题:求救,急!!!!

[size=5]lower_bound()和upper_bound()是什么意思啊?有什么用啊?[/size]

回复列表 (共6个回复)

沙发

try it yourself

e.g:  0 2 4 6 8
你在其中分别 lower_bound(4),lower_bound(5),upper_bound(4),upper_bound(5) 看看得到什么

板凳

怎么弄啊?通不过编译啊

lower_bound()和upper_bound()返回值是什么?在哪个头文件里面?

3 楼

#include <algorithm>
lower_bound()是找到第一个可以插入的位置。
upper_bound()是找到最后一个可以插入的位置。
[code=c]
 vector<int> nums;
 nums.push_back( -242 );
 nums.push_back( -1 );
 nums.push_back( 0 );
 nums.push_back( 5 );
 nums.push_back( 8 );
 nums.push_back( 8 );
 nums.push_back( 11 );          

 cout << "Before nums is: ";
 for( unsigned int i = 0; i < nums.size(); i++ ) {
   cout << nums[i] << " ";
 }
 cout << endl;            

 vector<int>::iterator result;
 int new_val = 7;               

 result = lower_bound( nums.begin(), nums.end(), new_val );             

 nums.insert( result, new_val );                

 cout << "After, nums is: ";
 for( unsigned int i = 0; i < nums.size(); i++ ) {
   cout << nums[i] << " ";
 }
 cout << endl;            
[/code]

4 楼

ls正解;


或者自己google一下,比来这里快多了。

5 楼

谢了啊
google我早就go了.....没看懂的

6 楼

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    int buf[] = { 2, 4, 6, 8 };

    size_t LEN = sizeof(buf)/sizeof(buf[0]);

    int* p1 = lower_bound( buf+0, buf+LEN, 4 ); // 4
    int* p2 = lower_bound( buf+0, buf+LEN, 5 ); // 6
    int* p3 = upper_bound( buf+0, buf+LEN, 4 ); // 6
    int* p4 = upper_bound( buf+0, buf+LEN, 5 ); // 6

    int* p5 = lower_bound( buf+0, buf+LEN, 0 ); // 2
    int* p6 = upper_bound( buf+0, buf+LEN, 8 ); // 8之后

    return 0;
}


可见lower_bound返回一个小于指定值的区域,即
[ 开始,lower_bound的返回值 ) 这个区域的元素都小于 lower_bound参数指定的值。
[ upper_bound的返回值, 结束 ) 这个区域的元素都大于 upper_bound参数指定的值。

我来回复

您尚未登录,请登录后再回复。点此登录或注册