Jad*_*ade 1 c++ arrays populate iota
我正在尝试按降序生成一个数组,就像从头开始实际填充它一样.我不是想对给定的数字进行排序.我想知道是否有办法在没有for循环的情况下完成它.我能够使用std :: iota以数字的升序生成数组,但我无法(也不认为我可以)使用它来生成降序数组.是否有一个衬垫用于生成按降序排列的大小数组?
编辑:我能够使用以下升序创建一个数组:
void generateAscendingArray(int values[], size_t size){
std::iota(values, values+size, 1);
}
Run Code Online (Sandbox Code Playgroud)
因此,它使用与数组大小相对应的数字填充数组.我只是在寻找一种简单的方法来生成一个没有循环的降序数组,或者使用最小的行和工作,类似于提升.我希望它按照数组的大小按降序填充数组.
最简单的解决方案可能是使用,std::iota但从后到前填充您的阵列.使用std::rbegin和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;
}
Run Code Online (Sandbox Code Playgroud)
输出 :
9 8 7 6 5 4 3 2 1 0
编辑:似乎您正在使用指向数组的第一个元素和大小的指针,而不是使用正确的容器对象.在这种情况下,std::rbegin并std::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;
}
Run Code Online (Sandbox Code Playgroud)
但是,最好将数组作为容器放弃,而不是std::vector使用标准容器,或者使用迭代器来表示元素的范围.