gpt4 book ai didi

c++ - all_of 函数检查数组部分所有元素的条件

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:37:09 24 4
gpt4 key购买 nike

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

#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);但对于传递给它的迭代器类型仍然是高性能的。

关于c++ - all_of 函数检查数组部分所有元素的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38818043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com