EDIT: В документах было слишком много отрицаний, которые смутили меня. Проблема в том, что у меня такой же итератор. Я решил это, вычитая 1 из нижнего возвращаемого значения lower_bound. Я использую его для интерполяции:
float operator()(double f)
{
SpectrumPoint* l=std::lower_bound(beginGet(),endGet(),(SpectrumPoint){float(f),0.0f}
,SpectrumPoint::CompareFreqLessThan);
if(l>beginGet())
{--l;}
SpectrumPoint* u=std::lower_bound(beginGet(),endGet(),(SpectrumPoint){float(f),0.0f}
,SpectrumPoint::CompareFreqLessThan);
if(u==endGet())
{u=beginGet();}
if(l==u)
{
if(u==endGet())
{return u->amp;}
return l->amp;
}
double f_min=l->freq;
double A_min=l->amp;
double f_max=u->freq;
double A_max=u->amp;
double delta_f=f_max-f_min;
double delta_A=A_max-A_min;
return A_min + delta_A*(f-f_min)/delta_f;
}
Прошу прощения за эту путаницу: - (
Что означает нижнее значение. Если бы мне пришлось угадать, я бы ответил, что эта функция возвращает итератор в последнем элементе, который меньше запрашиваемого значения. Но я вижу, что lower_bound почти совпадает с upper_bound. Единственное различие - строгое неравенство в случае upper_bound. Существует ли истинная функция выбора нижней границы в stl, которая согласуется с обычным определением нижней границы.