分配不同大小的std :: array

Jon*_*ans 2 c++ arrays std c++11

我有一个带有意义数据的填充std ::数组和一个带0的std ::数组.我希望将数组6分配给8的数组.在c ++中这样做的惯用方法是什么?

mfo*_*ini 7

std::copy如果目标数组大于源数组,则可以使用:

std::array<int, 6> arr1;
std::array<int, 10> arr2;
// Fill arr1...
std::copy(arr1.begin(), arr1.end(), arr2.begin());
Run Code Online (Sandbox Code Playgroud)

如果目标数组较短,则您必须复制到某个点.我的意思是,您仍然可以使用std::copy,但您必须执行以下操作:

std::array<int, 10> arr1;
std::array<int, 6> arr2;
// Fill arr1...
std::copy(arr1.data(), arr1.data() + arr2.size(), arr2.begin());
Run Code Online (Sandbox Code Playgroud)

这适用于两种情况:

std::copy(arr1.data(), arr1.data() + std::min(arr1.size(), arr2.size()), arr2.begin());
Run Code Online (Sandbox Code Playgroud)

  • 来自我的+1虽然我喜欢后者的`copy_n` (5认同)
  • 第二个例子在这两种情况下都不起作用,因为它访问了 `arr1` 中的越界元素。 (2认同)