我需要创建一个具有数字序列的std::vector
/std::initializer_list
,我想知道是否有以下函数(https://gcc.godbolt.org/z/8EjrYKhE6)的替代方案,该函数将创建矢量,而无需填充辅助矢量:
std::vector<int> generate(int cnt)
{
std::vector<int> result(cnt);
std::iota(result.begin(), result.end(), 0);
return result;
}
(即。,其他东西来创建已经填充序列的向量,"在适当的位置";不需要调用函数-我在成员初始化列表中使用它,它工作得很好,我只是好奇它是否可以缩短为其他东西)。
是的,您可以通过c++ 20的范围适配器std::views::iota
:
#include <ranges>
#include <vector>
std::vector<int> generate(int cnt)
{
auto r = std::views::iota(0, cnt);
return {r.begin(), r.end()};
}
演示。