all_of函数检查数组部分的所有元素中的条件

时间:2016-08-07 20:04:07

标签: c++ algorithm loops

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

#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.begin()替换foo[2]不起作用。我已经尝试了许多其他的东西来完成这项工作,所有这些都非常基础(非常基本的C ++用户),但没有成功。我不想为了实现这个目的而调整数组的大小。

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

1 个答案:

答案 0 :(得分:4)

您不能在此处使用迭代器和元素,它们不代表范围。从更一般的意义上讲,即使尝试使用指向元素和迭代器的指针也不能为任何给定容器的所有实现定义良好。

您应该使用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);但对于传递给它的迭代器类型仍然具有高性能。