【发布时间】:2021-12-07 02:17:18
【问题描述】:
我需要创建一个带有数字序列的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 iota 范围作为构造函数参数可能有效。不是答案,因为我对此了解不够。
-
如果
cnt在编译时已知,您可以使用integer_sequence和vector(initializer_list)来做到这一点。 -
顺便说一句:编译代码后不会有辅助向量,因为编译器会使用 RVO 将向量从函数内部移动到函数调用位置。