All_of函数用于检查数组中所有元素的条件

all_of function to check condition in all elements of part of an array

本文关键字:元素 条件 数组 of 函数 用于 检查 All      更新时间:2023-10-16

下面的代码检查声明的数组中是否所有元素都是奇数。

#include "stdafx.h"
#include <iostream>     // std::cout
#include <algorithm>    // std::all_of
#include <array>        // std::array
int main () {
    std::array<int,8> foo = {3,5,7,11,13,17,19,23};
    if ( std::all_of(foo.begin(), foo.end(), [](int i){return i%2;}) )
        std::cout << "All the elements are odd numbers.n";
    return 0;
}

(样本取自http://www.cplusplus.com/reference/algorithm/all_of)

我想检查是否foo[2] 开始声明的数组中的所有元素都是奇数。

foo[2]代替foo.begin()无效。我尝试了很多其他的东西来使这个工作,都是非常基本的(这里是非常基本的c++用户),没有成功。我不想为了实现这一点而调整数组的大小。

最终我要找的是有一个循环,在每个元素上检查数组的一部分的条件,就像for循环检查任何元素上的条件数组的一部分。这在R中相对容易实现,我希望在c++中也同样容易实现。

这里不能使用迭代器和元素,它们不代表范围。从更一般的意义上说,即使尝试使用指向元素的指针和迭代器,也不能很好地定义任何给定容器的所有实现。

应该使用std::next(it.begin(), 2)自增到begin()迭代器到foo[2]元素,然后可以使用两个迭代器遍历该范围。

std::all_of(std::next(foo.begin(), 2), foo.end(),
  [](int i){/*...*/})

std::next()更通用,适用于除了随机访问迭代器之外的迭代器(例如,用于替代it.begin() + 2);但是对于传递给它的迭代器类型来说仍然是高性能的。