首页 > 后端开发 > C++ > 如何在 C 中不重复地初始化非默认可构造 `std::array` ?

如何在 C 中不重复地初始化非默认可构造 `std::array` ?

Linda Hamilton
发布: 2024-10-30 03:31:02
原创
717 人浏览过

How to Initialize a Non-Default Constructible `std::array` Without Repetition in C  ?

不重复地初始化非默认可构造 std::array

在 C 中,初始化非默认可构造元素的 std::array可能是一个挑战。当数组大小 n 很大或模板参数时,标准初始化方法变得很麻烦。

解决方案:

一个优雅的解决方案利用迭代器和模板的组合。它的工作原理如下:

我们定义两个辅助实用程序:

  • genseq_t 生成整数序列 [0, 1, ..., n-1 ].
  • repeat 通过重复给定值指定次数来创建数组。

使用这些实用程序,我们可以初始化 std::array在模板函数 f 中如下:

<code class="cpp">template<typename T, int N>
void f(T value)
{
    std::array<T, N> items = repeat(value, genseq_t<N>{});
}</code>
登录后复制

实现细节:

  • genseq_t: 它使用可变参数模板来创建一个最多 n 的整数序列。
  • repeat: 此函数解包 genseq_t 生成的序列,并通过为序列中的每个整数调用 T(N, value) 来构造数组。

示例:

考虑使用 value 作为整数、n 作为模板参数的初始化:

<code class="cpp">void f(int value)
{
    std::array<T, 5> items = repeat(value, genseq_t<5>{});
}</code>
登录后复制

这里,项目将是使用重复五次的值进行初始化:{value, value, value, value, value}。

优点:

这种方法更简洁,尤其是当 n 为大的。它还消除了手动重复该值的需要。

以上是如何在 C 中不重复地初始化非默认可构造 `std::array` ?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板