按降序填充数组 C++ 不排序

Populating an array in descending order c++ NOT sorting

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

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

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

所以它用对应于数组大小的数字填充数组。我只是在寻找一种简单的方法来生成一个没有循环的降序数组,或者用最少的行和工作,类似于升序。我希望它按照数组的大小按降序填充数组。

最简单的解决方案可能是使用 std::iota but to fill your array from back to front. Use std::rbegin and std::rend 获取以相反顺序迭代的反向迭代器:

#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;
}

输出:

9 8 7 6 5 4 3 2 1 0

编辑:您似乎在使用指向数组第一个元素的指针和大小,而不是使用适当的容器对象。在那种情况下,std::rbeginstd::rend 无法单独使用指针推断出指向数组的大小。您将需要像以下示例中 foo 中所做的那样手动构建反向迭代器:

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

void foo(int * data, size_t size) {
    std::reverse_iterator<int*> first(data + size);
    std::reverse_iterator<int*> last(data);
    std::iota(first, last, 0);
}

int main()
{
    int my_data[10];

    foo(my_data, sizeof(my_data) / sizeof(*my_data));

    for (auto value : my_data) {
        std::cout << value << ' ';
    }
    std::cout << std::endl;
    return 0;
}

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