Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/cplusplus11/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++11 迭代c+的前N个元素+;11 std::数组_C++11 - Fatal编程技术网

C++11 迭代c+的前N个元素+;11 std::数组

C++11 迭代c+的前N个元素+;11 std::数组,c++11,C++11,我使用的是std::数组(c++11)。我之所以选择使用std::array,是因为我希望在编译时固定大小(与运行时相反)。无论如何,我只能迭代前N个元素。i、 e.类似于: 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);}); #include <iostream> #incl

我使用的是std::数组(c++11)。我之所以选择使用std::array,是因为我希望在编译时固定大小(与运行时相反)。无论如何,我只能迭代前N个元素。i、 e.类似于:

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);});
#include <iostream>
#include <array>

int main() {
    constexpr const int N = 4;
    std::array<int, 6> arr{ 0, 1, 2, 3, 4, 5 };
    for (auto it = std::begin(arr); it != std::begin(arr) + N && it != std::end(arr); ++it)
        std::cout << *it << std::endl;
}
std::array myArray={0,0,0,0,0};
std::find_if(myArray.begin(),myArray.begin()+4,[](intx){return(x%2==1);});

这不是最好的例子,因为FIFIOIF返回一个标记第一个奇数的迭代器,但是你得到了这个想法(我只想考虑第一个N,在这个例子中,n=4,我的STD::数组)的元素。< /P> 注意:也有类似的问题,但答案总是涉及到使用不同的容器(vector或valarray,这不是我想要的。正如我前面所述,我希望容器的大小在编译时固定)


提前谢谢你

如果要迭代
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);});
#include <iostream>
#include <array>

int main() {
    constexpr const int N = 4;
    std::array<int, 6> arr{ 0, 1, 2, 3, 4, 5 };
    for (auto it = std::begin(arr); it != std::begin(arr) + N && it != std::end(arr); ++it)
        std::cout << *it << std::endl;
}
#包括
#包括
int main(){
constexpr const int N=4;
数组arr{0,1,2,3,4,5};
for(auto it=std::begin(arr);it!=std::begin(arr)+N&&it!=std::end(arr);+it)

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

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

满足,与
std::vector
std::deque
相同

这意味着

std::array<int,6> myArray = {0,0,0,0,0,0};
您可以向它添加一个编号
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;
}
#include(
列表
多集
映射
多映射
)仅支持
+
-
  • forward\u list
    unordered\u set
    unordered\u multiset
    unordered\u map
    unordered\u multimap
    )只支持
    +
  • 不支持取消对后缀
    ++
    结果的引用

  • 你试过了吗?我不确定我是否理解你的问题和你的目标,你想得到数组中前N个元素的所有奇数吗?你可以使用它。否则,只需使用普通
    for
    循环并在N个元素上迭代即可。如果
    4
    是参数,你就不能将
    std::find\uter?为什么你认为当你使用不同的容器时,答案会有所不同?你能澄清一下你回答的是什么问题吗?当再次阅读OP的帖子时,我看不出这是如何回答他的问题的。(这是一个很好的、知情的答案,但不确定它回答了什么问题!)。同样,应该避免使用
    #define
    定义的常量。@Tobias:如何迭代C11
    std::array
    的前N个元素。你知道,问题的标题;-)那么为什么要使用
    std::find
    。@Tobias:因为它接近OP的示例,但比他的lamb更简单、更容易验证da.(我假设OP说的是“迭代”,但意思是“使用算法进行操作”,因为他给出了一个例子和附带的文本。)@JoachimPileborg:唉,这就是为什么我们不能拥有好东西的原因。-)在答案中添加了一条注释。