当前位置: 首页 > 知识库问答 >
问题:

为什么std::array没有一个构造函数,它接受要填充的数组的值?

欧阳嘉
2023-03-14

是缺乏

std::array<T,size>::array(const T& value);

一个疏忽?它对我来说似乎非常有用,动态容器(如std::向量)确实有一个类似的构造函数。

我完全意识到

std::array<T,size>::fill(const T& value);

但这不是构造函数,内存将首先清零。如果我想让所有人都像这家伙一样呢?

共有3个答案

施琦
2023-03-14

您可以使用索引序列:

namespace detail
{

    template <typename T, std::size_t...Is>
    constexpr std::array<T, sizeof...(Is)>
    make_array(const T& value, std::index_sequence<Is...>)
    {
        return {{(static_cast<void>(Is), value)...}};
    }
}

template <std::size_t N, typename T>
constexpr std::array<T, N> make_array(const T& value)
{
    return detail::make_array(value, std::make_index_sequence<N>());
}

演示

std::make_index_sequence是C 14,但可以在C 11中实现。

<代码>static_cast

郑卜鹰
2023-03-14

请注意,您可以利用数组不是零初始化的事实有效地模拟这种类型的构造函数,并且具有复制构造函数和do。

template <size_t N, class T>
array<T,N> make_array(const T &v) {
    array<T,N> ret;
    ret.fill(v);
    return ret;
}

auto a = make_array<20>('z');
尹善
2023-03-14

std::array设计上是一个聚合,因此没有用户声明的构造函数。

正如您所说,可以在默认构造之后使用填充。由于它是一个聚合,默认构造不会将内存归零,但会使其处于未初始化状态(如果包含的类型是可初始化的)。

 类似资料:
  • 问题内容: 我在一个Activity中有一个IntentService,当我尝试调用该服务时,它将引发此错误,我发现这很奇怪,因为如果我声明了空的构造函数。 错误: AndroidManifest.xml 活动: 问题答案: 你是一个内部阶级。如果要将其保留在内部,请将其更改为static: 您可能需要阅读不同类型的嵌套类。google的第一个链接:http : //docs.oracle.com

  • 输出8 好吧,我给出了 neg=-1,low=0、b=10、键盘=2、驱动器=3 的值,我的数组是 [3 1] [5 2 8] 我已经添加了键盘和驱动器值,将其存储在max数组中。当我将这些最大数组值与b if(max[i]进行比较时

  • 问题内容: Java为什么不支持C ++中的复制构造函数? 问题答案: Java。只是没有像在C ++中那样隐式地调用它们,我怀疑这是您的真正问题。 首先,复制构造函数无非是: 现在,C ++将使用以下语句隐式调用复制构造函数: 在这种情况下,克隆/复制在Java中根本没有意义,因为所有b1和b2都是引用,而不是像C 中那样的值对象。在C 中,该语句复制对象的状态。在Java中,它只是复制 引用

  • 问题内容: 如果您尝试封送引用了没有no-arg构造函数的复杂类型的类,例如: 与Java一起的JAXB实现,如下所示: JAXB会抛出一个 现在,我了解了为什么JAXB在解组时需要no-arg构造函数-因为它需要实例化该对象。但是为什么JAXB在编组时需要no-arg构造函数? 另外,还有一个问题,为什么Java的JAXB实现会在字段为null时抛出异常,并且无论如何都不会将其编组? 我是否缺少

  • 由于 Array 的构造函数在如何处理参数时有点模棱两可,因此总是推荐使用数组的字面语法 - [] - 来创建数组。 [1, 2, 3]; // 结果: [1, 2, 3] new Array(1, 2, 3); // 结果: [1, 2, 3] [3]; // 结果: [3] new Array(3); // 结果: [] new Array('3') // 结果: ['3'] // 译者

  • 问题内容: 我正在使用Spring 3.0.5,并为类成员尽可能多地使用@Autowire注释。我需要自动装配的bean之一需要其构造函数的参数。我浏览了Spring文档,但似乎找不到任何有关如何注释构造函数参数的参考。 在XML中,我可以将其用作bean定义的一部分。@Autowire注释是否有类似的机制? 例如: 在此示例中,如何在MyBeanService中使用@Autowire批注指定“