C ++ CppCheck算法建议(std :: find_if而不是原始循环)的相关性

塞巴斯蒂安·贝梅尔曼斯

CppCheck建议我用STL算法替换我的代码之一,我并不反对,但是我不知道如何替换它。我敢肯定这是一个错误的建议(CppCheck中存在有关实验功能的警告)。

这是代码:

    /* Cutted beginning of the function ... */

    for ( const auto & program : m_programs )
    {
        if ( program->compare(vertexShader, tesselationControlShader, tesselationEvaluationShader, geometryShader, fragmentShader) )
        {
            TraceInfo(Classname, "A program has been found matching every shaders.");

            return program;
        }
    }

    return nullptr;
} /* End of the function */

在if条件附近,我得到:“考虑使用std :: find_if算法而不是原始循环。”

我尝试使用它,但无法继续使用退货...我应该忽略这个建议吗?

谢尔盖·科列斯尼克(Sergey Kolesnik)

我想您可能不需要一次使用该查找功能。因此,根据DRY,您需要将调用std :: find_if算法的块分隔为不同的包装函数。

{

    // ... function beginning

    auto found = std::find_if(m_programs.cbegin(), m_programs.cend(), 
       [&](const auto& prog)
       {
           bool b = prog->compare(...);
           if (b)
                 TraceInfo(...);
           return b;
       });

    if (found == m_programs.cend())
       return nullptr;

    return *found;

}

这个建议很好。STL算法可以根据您的容器类型选择合适的方法。

此外,我建议您使用类似std :: set的自平衡容器。


// I don't know what kind of a pointer you use. 
using pProgType = std::shared_pointer<ProgType>;

bool compare_progs(const pProgType &a, const pProgType &b)
{
   return std::less(*a, *b);
}

std::set<std::shared_pointer<prog_type>, 
    std::integral_constant<decltype(&compare_progs), &compare_progs>> progs.

这是一个排序的容器,因此,在实现比较操作符(由std :: less调用)的情况下,您将花费更少的时间通过值搜索程序。

如果可以使用stl函数,请使用它。这样,您将不必记住自己的发明,因为stl已正确记录在案并且可以安全使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

cppcheck建议的C ++使用显式

来自分类Dev

C ++-遍历从find_if返回的std :: vector <>

来自分类Dev

在c中实现调度算法的建议

来自分类Dev

使用C ++中的std ::算法输出`std :: multiset`的唯一元素及其频率,输出(无循环)

来自分类Dev

查找图像之间的空间相关性应使用哪种算法?

来自分类Dev

Leveinshtein 和 hash - 找到一种导致相关性的散列算法(更近的距离)

来自分类Dev

在C中使用void指定空参数列表的相关性

来自分类Dev

将算法从Python转换为C:关于在C中使用bin()的建议?

来自分类Dev

C ++ DLL相关性状态模式

来自分类Dev

使用C#驱动程序从MongoDB集合上的文本查询中检索相关性排序结果

来自分类Dev

具有从NameBase类到模板Name类的相关性的C ++习惯用法(或模式)

来自分类Dev

如何使用std算法替换此for循环?

来自分类Dev

STL std :: find()C ++

来自分类Dev

std :: find的C等价

来自分类Dev

为什么MATCH返回整数相关性而不是float

来自分类Dev

Visual C ++在std :: sort中使用什么排序算法

来自分类Dev

如何在C ++ 20约束算法中投影std :: tuple

来自分类Dev

循环相关性错误自动加载常量

来自分类Dev

数据框与旋转值的相关性(循环?)

来自分类Dev

FOR 循环问题以及 IP 地址的相关性

来自分类Dev

通过C中的算法实现for循环

来自分类Dev

Azure搜索中有没有一种方法可以控制建议API中的相关性提升?

来自分类Dev

请建议使用最新的编译器而不是Turbo C ++?

来自分类Dev

是否建议/在C编程中使用无限循环

来自分类Dev

如何使用-std = c ++ 11解决g ++警告:不建议使用'auto_ptr'

来自分类Dev

C ++数学特殊功能中的std :: complex <>:技术规范或建议

来自分类Dev

更新HATEOAS的相关性

来自分类Dev

MySQL相关性排序

来自分类Dev

根据相关性填写

Related 相关文章

  1. 1

    cppcheck建议的C ++使用显式

  2. 2

    C ++-遍历从find_if返回的std :: vector <>

  3. 3

    在c中实现调度算法的建议

  4. 4

    使用C ++中的std ::算法输出`std :: multiset`的唯一元素及其频率,输出(无循环)

  5. 5

    查找图像之间的空间相关性应使用哪种算法?

  6. 6

    Leveinshtein 和 hash - 找到一种导致相关性的散列算法(更近的距离)

  7. 7

    在C中使用void指定空参数列表的相关性

  8. 8

    将算法从Python转换为C:关于在C中使用bin()的建议?

  9. 9

    C ++ DLL相关性状态模式

  10. 10

    使用C#驱动程序从MongoDB集合上的文本查询中检索相关性排序结果

  11. 11

    具有从NameBase类到模板Name类的相关性的C ++习惯用法(或模式)

  12. 12

    如何使用std算法替换此for循环?

  13. 13

    STL std :: find()C ++

  14. 14

    std :: find的C等价

  15. 15

    为什么MATCH返回整数相关性而不是float

  16. 16

    Visual C ++在std :: sort中使用什么排序算法

  17. 17

    如何在C ++ 20约束算法中投影std :: tuple

  18. 18

    循环相关性错误自动加载常量

  19. 19

    数据框与旋转值的相关性(循环?)

  20. 20

    FOR 循环问题以及 IP 地址的相关性

  21. 21

    通过C中的算法实现for循环

  22. 22

    Azure搜索中有没有一种方法可以控制建议API中的相关性提升?

  23. 23

    请建议使用最新的编译器而不是Turbo C ++?

  24. 24

    是否建议/在C编程中使用无限循环

  25. 25

    如何使用-std = c ++ 11解决g ++警告:不建议使用'auto_ptr'

  26. 26

    C ++数学特殊功能中的std :: complex <>:技术规范或建议

  27. 27

    更新HATEOAS的相关性

  28. 28

    MySQL相关性排序

  29. 29

    根据相关性填写

热门标签

归档