C++:创建带有序列号的向量

C++: Create vector with sequence number in place

提问人:Ferenc Deak 提问时间:10/20/2021 更新时间:10/20/2021 访问量:348

问:

我需要创建一个带有数字序列的 /,我想知道是否有以下函数 (https://gcc.godbolt.org/z/8EjrYKhE6) 的替代方案可以在不填充辅助向量的情况下创建向量:std::vectorstd::initializer_list

std::vector<int> generate(int cnt)
{
    std::vector<int> result(cnt);
    std::iota(result.begin(), result.end(), 0);
    return result;
}

(即,其他东西可以创建已经填充了序列的向量,“就地”,而无需调用函数 - 我在成员初始值设定项列表中使用它,并且它运行良好,如果它可以缩短为其他东西,我只是好奇)。

C++ 向量 序列

评论

0赞 Sebastian Redl 10/20/2021
C++20 iota 范围作为构造函数参数可能有效。不是答案,因为我对此了解不够。
0赞 rafix07 10/20/2021
如果在编译时已知,则可以使用 with 来执行此操作。cntinteger_sequencevector(initializer_list)
0赞 sbecker 10/20/2021
顺便说一句:编译代码后不会有辅助向量,因为编译器将使用 RVO 将向量从函数内部移动到函数调用位置。

答:

1赞 康桓瑋 10/20/2021 #1

是的,您可以通过 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()};
}

演示。