这与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 ++中执行相同的任务有没有这样简单的方法?
答案 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
为目的地。