【问题标题】:C++: Create vector with sequence number in placeC ++:使用适当的序列号创建向量
【发布时间】: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_sequencevector(initializer_list) 来做到这一点。
  • 顺便说一句:编译代码后不会有辅助向量,因为编译器会使用 RVO 将向量从函数内部移动到函数调用位置。

标签: c++ vector sequence


【解决方案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()};
}

Demo.

【讨论】:

    猜你喜欢
    • 2019-05-31
    • 2014-03-03
    • 1970-01-01
    • 2018-10-23
    • 2016-06-14
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多