c – lower_bound == upper_bound

编辑:文件太多了,使我感到困惑.问题是我得到了相同的迭代器.我通过从lower_bound返回值减去1来解决它.我用它进行插值:
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(),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;
        }

我很抱歉这个混乱:-(

low_bound是什么意思如果我不得不猜测我会回答这个函数返回的迭代器的最后一个元素小于要求的值.但是我看到lower_bound与upper_bound几乎相同.唯一的区别是在upper_bound的情况下是严格的不等式. stl中是否存在真正的下界选择功能,与下界的正常定义一致.

解决方法

>下限:大于或等于的第一个元素.
>上限:第一个要严格要大的元素.

例:

+- lb(2) == ub(2)       +- lb(6)        +- lb(8)
|        == begin()     |  == ub(6)     |   +- ub(8) == end()
V                       V               V   V
+---+---+---+---+---+---+---+---+---+---+---+
| 3 | 4 | 4 | 4 | 4 | 5 | 7 | 7 | 7 | 7 | 8 |
+---+---+---+---+---+---+---+---+---+---+---+
    ^               ^                       ^
    |               |                       |
    +- lb(4)        +- ub(4)                +- lb(9) == ub(9) == end()

    |- eq-range(4) -|

正如你所看到的,n的半开等距范围是[lb(n),ub(n)).

请注意,两个界限都可以为期望值的元素提供有意义的插入位置,以便维护排序,但lower_bound具有区别特征,即如果该元素已经存在,那么您将获得一个实际指向该元素的迭代器.因此,您可以在有序范围上使用lower_bound来实现您自己的唯一成员或多成员容器.

void insert(Container & c,T const & t)
{
    auto it = std::lower_bound(c.begin(),c.end(),t);

    // if unique container:
    if (it != c.end() && *it == t) { /* error,element exists! */ return; }

    c.insert(it,t);
}

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...