【问题标题】:How to convert int[4] to std::array<int,4>? [duplicate]如何将 int[4] 转换为 std::array<int,4>? [复制]
【发布时间】:2020-04-05 19:27:29
【问题描述】:

我有一个语言内置数组,我需要将它的元素复制到容器库数组中进行一些处理。我已经尝试了几件事,但它似乎不起作用。有没有办法将一种类型转换为另一种类型?

语言内置数组声明为:

int arr[] = {1,12,343,54,99};

虽然库容器数组声明为:

std::array<int,4> myarray = {4, 26, 80, 14} ;

std::array 在标题 &lt;array&gt; 下声明。

【问题讨论】:

  • 你能详细说明一下吗?是否要将值从 int[] 复制到 std::array&lt;int&gt;?在您的示例中,arrmyarray 是否以任何方式相关?
  • 我认为post 回答了你的问题。
  • @PankajMishra 啊。不幸的是,cplusplus.com 有点垃圾。谷歌搜索这个词表明他们基本上发明了这个词,它没有在其他任何地方使用。
  • @PankajMishra 这绝对是不是最“真实”的。任何人都可以注册域名,而 cplusplus.com 恰好是第一个抢到它的人。它们绝不是权威的,大多数专家倾向于避开该网站。 “官方”网站是isocpp.org,一个很好的参考是cppreference.com
  • cppreference.com 被广泛认为是 C++ 的“官方非官方参考”。

标签: c++ arrays stl


【解决方案1】:

对于 C++20,这就是 std::to_array 的用途。

int arr[] = {1,12,343,54};
std::array<int,4> myarray = std::to_array(arr); // could use "auto myarray" instead

在 C++20 之前,如果您的元素类型不可复制或复制成本很高,您可以使用 std::copystd::move

int arr[] = {1,12,343,54};
std::array<int, 4> myarray;
std::copy(arr, arr+4, myarray.begin());
// or
std::copy(std::begin(arr), std::end(arr), myarray.begin());

【讨论】:

  • 这确实回答了我的问题。谢谢。
  • 我不认为to_array 的实现使用任何特定于C++20 的东西,所以@PankajMishra 可以从cppref 复制实现。另请注意,虽然std::copy 非常适合int,但您可能希望使用std::move 的类型(不是演员表,而是算法)。
  • C++ 20 赞!
猜你喜欢
  • 2016-08-14
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
相关资源
最近更新 更多