• 【C++11新算法】all_of、any_of、none_of算法



    前言

    在C++11标准中,引入了许多重要的新特性和改进,其中包括了一些新的算法。其中,all_of、any_of和none_of是几个非常实用的算法函数。它们提供了一种简洁而强大的方式来检查容器中的元素是否满足特定的条件。本文将详细介绍这三个算法的概念、使用方式以及提供多个示例代码,以帮助读者更好地理解和应用它们。


    一、概念

    在深入讨论all_of、any_of和none_of之前,我们先来了解一下它们的概念。

    1.1all_of

    该算法函数用于检查容器中的所有元素是否都满足给定的条件。如果容器中的每个元素都满足条件,则返回true;否则,返回false。

    1.2any_of

    any_of:该算法函数用于检查容器中是否至少存在一个元素满足给定的条件。如果容器中的至少一个元素满足条件,则返回true;否则,返回false。

    1.3none_of

    none_of:该算法函数用于检查容器中是否没有任何元素满足给定的条件。如果容器中没有任何元素满足条件,则返回true;否则,返回false。

    二、使用方式

    这三个算法函数都位于 头文件中,并接受三个参数:容器的起始迭代器、容器的结束迭代器,以及一个用于判断条件的谓词(可以是函数指针、函数对象或Lambda表达式)。这些算法函数基于范围遍历容器中的元素,并根据谓词的返回值来判断是否满足条件。

    三、示例代码

    3.1all_of

    使用std::all_of算法函数检查容器中的所有元素是否为偶数。

    #include 
    #include 
    #include 
    
    int main() {
        std::vector<int> numbers = {2, 4, 6, 8, 10};
    
        // 使用all_of检查所有元素是否都为偶数
        if (std::all_of(numbers.begin(), numbers.end(), [](int num) { return num % 2 == 0; })) {
            std::cout << "All elements are even." << std::endl;
        } else {
            std::cout << "Not all elements are even." << std::endl;
        }
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    输出:

    All elements are even.
    
    • 1

    在这里插入图片描述

    3.2any_of

    使用std::any_of算法函数检查容器中是否至少存在一个元素大于10。

    #include 
    #include 
    #include 
    
    int main() {
        std::vector<int> numbers = {5, 8, 12, 3, 6};
    
        // 使用any_of检查是否至少存在一个元素大于10
        if (std::any_of(numbers.begin(), numbers.end(), [](int num) { return num > 10; })) {
            std::cout << "At least one element is greater than 10." << std::endl;
        } else {
            std::cout << "No element is greater than 10." << std::endl;
        }
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    输出:

    At least one element is greater than 10.
    
    • 1

    在这里插入图片描述

    3.3none_of

    使用std::none_of算法函数检查容器中是否没有元素小于0。

    #include 
    #include 
    #include 
    
    int main() {
        std::vector<int> numbers = {1, 3, 5, 7, 9};
    
        // 使用none_of检查是否没有元素小于0
        if (std::none_of(numbers.begin(), numbers.end(), [](int num) { return num < 0; })) {
            std::cout << "No element is less than 0." << std::endl;
        } else {
            std::cout << "At least one element is less than 0." << std::endl;
        }
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    输出:

    No element is less than 0.
    
    • 1

    在这里插入图片描述

    3.4检查一个字符串中的所有字符是否为小写字母

    使用std::all_of算法函数检查一个字符串中的所有字符是否为小写字母。

    #include 
    #include 
    #include 
    
    int main() {
        std::string str = "hello world";
    
        // 使用all_of检查字符串中的所有字符是否为小写字母
        if (std::all_of(str.begin(), str.end(), [](char c) { return std::islower(c); })) {
            std::cout << "All characters are lowercase letters." << std::endl;
        } else {
            std::cout << "Not all characters are lowercase letters." << std::endl;
        }
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    输出:

    All characters are lowercase letters.
    
    • 1

    在这里插入图片描述

    3.5查一个容器中是否至少存在一个字符串长度超过5的元素

    使用std::any_of算法函数检查一个容器中是否至少存在一个字符串长度超过5的元素。

    #include 
    #include 
    #include 
    #include 
    
    int main() {
        std::vector<std::string> words = {"apple", "banana", "cat", "dog", "elephant"};
    
        // 使用any_of检查容器中是否至少存在一个字符串长度超过5的元素
        if (std::any_of(words.begin(), words.end(), [](const std::string& word) {
            return word.length() > 5;
        })) {
            std::cout << "At least one element has a length greater than 5." << std::endl;
        } else {
            std::cout << "No element has a length greater than 5." << std::endl;
        }
    
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    总结

    通过使用all_of、any_of和none_of算法函数,我们可以轻松地检查容器中的元素是否满足特定的条件。这三个算法函数使得代码变得简洁、直观,并提供了一种有效的方式来处理容器中的元素。通过传递适当的迭代器和谓词,我们可以轻松地在容器中执行各种复杂的查询操作。这些算法函数的引入提升了C++的编程效率和代码质量,可以让我们更加专注于问题的解决而不是繁琐的迭代操作。加深对这些算法函数的理解,并灵活应用它们,将使我们的代码更加简洁、可维护和可靠,为我们的开发工作带来更多的便利和效益。

  • 相关阅读:
    灌区量测水监测系统解决方案 灌区量测水系统解决方案 农业水价综合改革解决方案
    数据库字段,对应java对象属性
    原生js 实现table表格
    蓝牙安全入门——两道CTF题目复现
    基于Linux的智能家居(工厂模式)
    MCE 虚拟筛选、小分子化合物库
    【错误解决方案】ModuleNotFoundError: No module named ‘ngboost‘
    【国庆活动】关于Spring Beans 的理解
    分布式锁实现方案
    Flutter ‘/usr/lib/libswiftCore.dylib‘ (no such file)
  • 原文地址:https://blog.csdn.net/m0_62599305/article/details/133542152