小编xEr*_*_xD的帖子

stl中upper_bound和lower_bound之间的区别

我在查看这些页面上的upper_bound和lower_bound算法如何在stl中工作:lower_bound,upper_bound,并且在这些页面上以相同的方式记录:lower_bound,upper_bound

查看链接中的代码,它们似乎对我做了完全相同的事情,只有以下几行不同(查看前两个链接中的代码):

lower_bound(第10行):

if (*it<val) {                 // or: if (comp(*it,val)), for version (2)
Run Code Online (Sandbox Code Playgroud)

upper_bound(第10行):

 if (!(val<*it))                // or: if (!comp(val,*it)), for version (2) 
Run Code Online (Sandbox Code Playgroud)

但肯定会逆转比较元素,然后将它们与假比较是双重否定,因此它们完全相同?

实际上是否存在差异,我只是没有看到,这是网站文档中的错误吗?如果是后者,那么正确的方法是什么?

c++ stl

6
推荐指数
3
解决办法
2392
查看次数

模板类中静态变量的 Decltype

我正在尝试使用 clang 在类范围之外定义模板类的静态变量:

class Bar
{
public:
    float a;
};

template<long count>
class Foo {
public:
    static Bar* test;
};

template<long count>
decltype(Foo<count>::test) Foo<count>::test; // error

int main() {
    Foo<5> f;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误: error: redefinition of 'test' with a different type: 'decltype(Foo<count>::test)' vs 'Bar *'

在我看来decltype(Foo<count>::test)应该评估为Bar *.

这段代码在 MSVC 上运行良好。

我的问题:有没有办法decltype在这里正确确定类型?

在实际代码中,decltype是在一个宏中定义的,该宏具有一些附加关键字,具体取决于所使用的配置,所以我希望在仍然使用decltype.

c++ templates decltype

5
推荐指数
1
解决办法
157
查看次数

标签 统计

c++ ×2

decltype ×1

stl ×1

templates ×1