gpt4 book ai didi

c++11 - 迭代 c++11 std::array 的前 N ​​个元素

转载 作者:行者123 更新时间:2023-12-04 21:36:38 25 4
gpt4 key购买 nike

我正在使用 std::array (c++11)。我选择使用 std::array 是因为我希望在编译时(而不是运行时)固定大小。无论如何我只能迭代前 N 个元素。即类似:

std::array<int,6> myArray = {0,0,0,0,0,0};
std::find_if(myArray.begin(), myArray.begin() + 4, [](int x){return (x%2==1);});

这不是最好的例子,因为 find_if 返回一个标记第一个奇数的迭代器,但你明白了(我只想考虑第一个 N,在这种情况下 N=4,我的 std::array 元素)。

注意:有与此类似的问题,但答案总是涉及使用不同的容器(vector 或 valarray,这不是我想要的。正如我之前所描述的,我希望在编译时固定容器的大小) .

先感谢您!!

最佳答案

从您提出问题的方式来看,我假设您说的是“迭代”,但实际上是指“使用算法进行操作”。

该行为并不特定于容器,而是特定于容器的迭代器类型。

std::array::iterator_type 满足RandomAccessIterator , 同 std::vectorstd::deque .

这意味着,给定

std::array<int,6> myArray = {0,0,0,0,0,0};


auto end = myArray.begin() // ...

您可以添加一个号码 n对它...
auto end = myArray.begin() + 4;

...导致迭代器指向 n 之外的一个元素数组中的第 th 个元素。因为这就是 end 的定义。序列的迭代器,
std::find_if(myArray.begin(), myArray.begin() + 4, ... )

工作得很好。一个更直观的例子:
#include <algorithm>
#include <array>
#include <iostream>

#define N 4

int main()
{
std::array<char, 6> myArray = { 'a', 'b', 'c', 'd', 'e', 'f' };
auto end = myArray.begin() + N;
if ( std::find( myArray.begin(), end, 'd' ) != end )
{
std::cout << "Found.\n";
}
return 0;
}

这将找到数组中的第 4 个元素,并打印“Found”。

更改 #define N 4#define N 3 ,它什么也不打印。

当然,这是假设你的数组有 N元素。如果您不确定,请查看 N <= myArray.size()首先使用 myArray.end()相反,如果需要。

为了完整性:
  • BidirectionalIterator ( list , set , multiset , map , multimap ) 仅支持 ++-- .
  • ForwardIterator ( forward_list , unordered_set , unordered_multiset , unordered_map , unordered_multimap ) 仅支持 ++ .
  • InputIterator不支持解引用 postfix 的结果 ++ .
  • 关于c++11 - 迭代 c++11 std::array 的前 N ​​个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36331050/

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