如何在C ++中将数组的一部分复制到另一个数组?

时间:2012-06-19 13:31:20

标签: c++

这与C#中提出的问题相同,但我需要C ++

如何将数组的一部分复制到另一个数组?

考虑一下我

    int[] a = {1,2,3,4,5};

现在,如果我给出数组的起始索引和结束索引,它应该被复制到另一个数组。

就像我将start index设为1并将end index设为3一样,元素2,3,4应该被复制到新数组中。

在C#中完成如下

     int[] b = new int[3];
    Array.Copy(a, 1, b, 0, 3);

在C ++中执行相同的任务有没有这样简单的方法?

5 个答案:

答案 0 :(得分:13)

是的,请使用std::copy

std::copy(a + src_begin_index,
          a + src_begin_index + elements_to_copy,
          b + dest_begin_index);

您的C#示例相当于:

std::copy(a + 1, a + 4, b);

答案 1 :(得分:3)

假设您需要动态分配的数组,如C#示例中所示,最简单的方法是:

std::vector<int> b(a.begin() + 1, a.begin() + 4);

这也有一个好处,它会在被破坏时自动释放分配的内存;如果你自己使用new,那么你还需要使用delete来避免内存泄漏。

答案 2 :(得分:1)

C memcpy命令,您可以这样使用:

memcpy(destinationArray, sourceArray, sizeof(*destinationArray) * elementsToCopy);

还有std::copy,这是一种更C++方式:

std::copy(source, source + elementsInSource, destination);

请注意,这些功能都不会检查以确保已分配足够的内存,因此使用风险自负!

答案 3 :(得分:1)

是的,使用st标准库算法copy

#include <algorithm>

int main()
{
  int array[5] = { 1,2,3,4,5 }; // note: no int[] array
  int *b = new int[3];
  std::copy(array+1, array+4, b); 
  // copies elements 1 (inclusive) to 4 (exclusive), ie. values 2,3,4
}

答案 4 :(得分:0)

对于简单的C风格数组,您可以使用memcpy

memcpy(b, &a[1], sizeof(int) * 3);

此行从sizeof(int) * 3的索引1复制a个字节(即12个字节),其中b为目的地。