【问题标题】:In C++, is it possible to initialize an array directly from another?在 C++ 中,是否可以直接从另一个数组初始化?
【发布时间】:2016-05-03 23:40:10
【问题描述】:

在 C++ 中,是否可以直接从另一个内置数组初始化?据我所知,只能有一个数组,然后将每个元素从另一个数组复制/移动到它,这是某种赋值,而不是初始化。

【问题讨论】:

  • 您是否担心 int n[5] 和/或 std::array<>s 的内置数组?
  • @TonyD 我的意思是内置数组。
  • 能否把你的问题说得更清楚一点?添加一些伪例如
  • @Lingxi std::array 由 C++11 引入,作为内置数组顶部的便捷包装器;它提供了复制构造函数和复制赋值操作符,所以你不必手动操作。

标签: c++ arrays syntax initialization c++14


【解决方案1】:

这是C++ 11std::array的新功能之一。

std::array <int, 5> a = {1, 2, 3, 4, 5};
std::array <int ,5> b = a;

后者将数组a复制到b中。

【讨论】:

    【解决方案2】:

    数组既没有复制构造函数也没有复制赋值运算符。您只能将一个数组中的元素逐个元素复制到另一个元素。

    字符数组可以由字符串字面量初始化。或者可以使用标头&lt;cstring&gt; 中声明的strcpystrncpymemcpy 等标准C 函数复制字符串。

    对于其他数组,您可以使用例如在标头 &lt;algorithm&gt; 中声明的标准算法 std::copystd::copy_ifstd::transform

    否则,您可以使用标准容器std::arraystd::vector,它们允许将一个类型的对象分配给相同类型的另一个对象或从另一个对象创建一个对象。

    【讨论】:

    • 那么,答案基本上是否定的?
    • @Lingxi 对于内置数组,答案是否定的,唯一的方法是将数组包含在结构中(这样设计了 std::array )并从另一个创建结构的对象已经包含一些应该复制的数组的相同类型的对象。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    相关资源
    最近更新 更多