C++ 按降序c+填充数组+;不分类

C++ 按降序c+填充数组+;不分类,c++,arrays,populate,iota,C++,Arrays,Populate,Iota,我试图按降序生成数组,实际上是从头开始填充。我不是在给给定的数字排序。我想知道是否有一种不用for循环的方法。我能够使用std::iota以数字的升序生成数组,但我还不能(我认为我也不能)使用它来生成降序数组。是否有一个用于按降序生成大小数组的行程序 编辑: 我可以使用以下命令按升序创建数组: void generateAscendingArray(int values[], size_t size){ std::iota(values, values+size, 1);

我试图按降序生成数组,实际上是从头开始填充。我不是在给给定的数字排序。我想知道是否有一种不用for循环的方法。我能够使用std::iota以数字的升序生成数组,但我还不能(我认为我也不能)使用它来生成降序数组。是否有一个用于按降序生成大小数组的行程序

编辑: 我可以使用以下命令按升序创建数组:

    void generateAscendingArray(int values[], size_t size){
        std::iota(values, values+size, 1);
    }

因此,它用与数组大小对应的数字填充数组。我只是在寻找一种简单的方法来生成一个降序数组,不需要循环,或者使用最小的行和功,类似于升序。我希望它按照数组的大小按降序填充数组。

最简单的解决方案可能是使用,但要从后到前填充数组。使用和获取按相反顺序迭代的反向迭代器:

#include <array>
#include <iostream>
#include <iterator>
#include <numeric>

int main()
{
    std::array<int, 10> my_data;
    std::iota(std::rbegin(my_data), std::rend(my_data), 0);
    for (auto value : my_data) {
        std::cout << value << ' ';
    }
    std::cout << std::endl;
    return 0;
}

但是,最好将数组作为容器,而不是标准容器,如
std::vector
,或者使用迭代器来表示元素的范围。

最简单的解决方案可能是使用,但要从后到前填充数组。使用和获取按相反顺序迭代的反向迭代器:

#include <array>
#include <iostream>
#include <iterator>
#include <numeric>

int main()
{
    std::array<int, 10> my_data;
    std::iota(std::rbegin(my_data), std::rend(my_data), 0);
    for (auto value : my_data) {
        std::cout << value << ' ';
    }
    std::cout << std::endl;
    return 0;
}

但是,最好将数组作为容器,而不是标准容器,如
std::vector
,或者使用迭代器来表示元素的范围。

这是一个未指定问题的典型示例。数组边界是动态的还是固定的?向量是数组吗?while循环算作for循环吗?“成功”的标准是什么?虽然我很欣赏用英语写的动机,但如果你能提供你最好的尝试并解释为什么它不必要,这个问题可能会有很大的改进。这是一个未明确问题的典型例子。数组边界是动态的还是固定的?向量是数组吗?while循环算作for循环吗?“成功”的标准是什么?虽然我很欣赏用英语写的动机,但如果你能提供你最好的尝试并解释为什么这样做是不必要的,这个问题可能会得到很大的改善。这似乎正是我想要做的。但由于某种原因,我得到了一个错误:“调用'rend'时没有匹配的函数”。你知道为什么吗?@Jade更新。当与
int[]
函数参数一起使用时,解决方案就不那么优雅了。指针/大小对可以作为表示一系列元素的一种方式,但这不是一种很好的方式。这是该方法缺点的一个例子。这似乎正是我想要做的。但由于某种原因,我得到了一个错误:“调用'rend'时没有匹配的函数”。你知道为什么吗?@Jade更新。当与
int[]
函数参数一起使用时,解决方案就不那么优雅了。指针/大小对可以作为表示一系列元素的一种方式,但这不是一种很好的方式。这是该方法缺点的一个例子。