c++ - 使用 std::fill 与 std::integer_sequence 进行 std::array 填充

标签 c++ templates

我真的没有任何问题,我只是有点好奇。我一直在浏览SO并看到this邮政。这是一个非常酷的技巧,但是它比普通的旧 std::fill 有什么优势吗?

我一直在快速工作台上使用它,似乎它在 -Og 和 -O3 的性能方面没有提供任何优势,并且显然它对可读性没有帮助。我只是想不出任何使用它的理由。我是 C++ 的新手,也许我做错了什么,所以这是我的填充版本代码:

template<typename T, size_t N, typename... Ts>
auto make_fill_array(Ts&&... args) noexcept(std::is_nothrow_constructible<T>::value)
    -> std::array<T, N> {
    std::array<T, N> ret;
    std::fill(ret.begin(), ret.end(), T{std::forward<Ts>(args)...});
    return ret;
}

还有一个专门针对可使用 std::initializer_list 构造的容器的模板,但这只是一些样板文件。

编辑: 有人问我使用情况。我并没有真正考虑过这段代码,因为它不是我个人项目的一部分,这只是个人好奇心,所以我的测试都是这样简单的东西。

auto fillarray = make_fill_array<Point, 10>(1, 6);

auto fillarray2 = make_fill_array<std::vector<Point>, 5>(5, Point{1, 6});

最佳答案

这需要更多 T比包扩展解决方案。

如果类型不可默认构造,std::array<T, N> ret;不起作用(至少对于 N > 0 )。

如果它不可复制分配,则 fill也行不通。 (std::array 也有一个 fill 成员函数。)

最后,如果它不可移动构造,则 return ret;行不通。

关于c++ - 使用 std::fill 与 std::integer_sequence 进行 std::array 填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77433300/

相关文章:

java - Java 中等效的 'nth_element' 函数是什么?

c++ - 对于非管理员用户,localhost 上的 HttpAddUrl 失败

python - Django:有没有办法在嵌套文件夹中加载模板?

c++ - 类模板继承 C++

c++ - 为什么我在声明的函数上收到链接错误?

c++ - C++ 编程中的 vector 类

c++ - 魔鬼 iluErrorString() 导致访问冲突

c++ - map 中的随机元素

c++ - 获取合成时间 C++

带模板的 C++ 共享库 : Undefined symbols error