C++11 新增的判断算法 正文

「这是我参与11月更文挑战的第 8 天,活动详情查看:2021最后一次更文挑战」。

参加该活动的第 16 篇文章

参考原文地址:C++11 新增的一些便利的算法

我对文章的格式和错别字进行了调整,并补充标注出了重要的部分,根据我自己的理解把重点部分进一步解释完善(原作者的代码注释甚少,有的地方甚至有错误)。以下是正文

正文

C++11 新增加了一些便利的算法 —— 比如三个用于判断的算法 all_ofany_ofone_of ,使我们的代码写起来更简洁方便,更多的新增算法读者可以参考 en.cppreference.com/w/cpp/algor…

对应的定义如下

1
2
3
4
5
6
7
8
cpp复制代码template <class InputIt, class UnaryPredicate>
bool all_of(InputIt first, InputIt last, UnaryPredicate p);

template <class InputIt, class UnaryPredicate>
bool any_of(InputIt first, InputIt last, UnaryPredicate p);

template <class InputIt, class UnaryPredicate>
bool none_of(InputIt first, InputIt last, UnaryPredicate p);
  • all_of: 检查区间 [first, last) 中是否所有的元素都满足一元判断式 p,所有的元素都满足条件返回 true ,否则返回 false
  • any_of:检查区间 [first, last) 中是否至少有一个元素都满足一元判断式 p,只要有一个元素满足条件就返回 true,否则返回 true
  • none_of:检查区间 [first, last) 中是否所有的元素都不满足一元判断式 p,所有的元素都不满足条件返回 true,否则返回 false

下面是这几个算法的示例【原作者的代码有误】:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
cpp复制代码#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
vector<int> v = { 1, 3, 5, 7, 9 };

auto isOdd = [](int i) {
return i % 2 != 0;
};

auto isEven = [](int i) {
return i % 2 == 0;
};

/// @note 所有都是奇数才返回 true
bool isallOdd = std::all_of(v.begin(), v.end(), isOdd);
if (isallOdd)
cout << "all is odd" << endl;

/// @note 没有一个是偶数才返回 true
bool isNoneEven = std::none_of(v.begin(), v.end(), isEven);
if (isNoneEven)
cout << "none is even" << endl;

/// @note 至少有一个是偶数才返回 true
vector<int> v1 = { 1, 3, 5, 7, 8, 9 };
bool anyof = std::any_of(v1.begin(), v1.end(), isEven);
if (anyof)
cout << "at least one is even" << endl;
}

输出结果为

image.png

(完)

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%