从函数参数 [C++] 复制整数数组

Copy an array of ints from a function parameter [C++]

本文关键字:复制 整数 数组 C++ 函数 参数      更新时间:2023-10-16

我有一个C++函数,它以这样的方式启动

void findSolutions(vector<MOVE> & solutions, int board[], int maxPegs){
int newboard[18];
copy(begin(board), end(board), begin(newboard));
...
more code
...
}

我正在尝试将参数"board"复制到临时 int 数组中,这样我就不会直接修改原始板。但是在copy((中,我从VSCode收到以下错误

no instance of overloaded function "begin" matches the argument list -- argument types are: (int *)

如何复制从参数传入的数组?谢谢

std::copy

在迭代器方面工作。begin()/end()在指针上调用,即board不会产生迭代器,相反board衰减到指针的数组可以直接用作迭代器。 您可以通过以下方式简单地使用std::copy

std::copy(board, board + len, newboard);

我假设len是您要复制的长度,并确保newboard有能力存储len数量的元素。

您无法安全地执行此操作。数组在传递到函数时衰减为指针。您将无法确保源数组有足够的字节来读取(除非应用程序是微不足道的,并且您知道调用方端发生了什么(。如果将数组作为指向第一个元素的指针传递,则您也有责任传递数组的长度。假设boardLen板中int的数量,您可以执行以下操作,

void findSolutions(vector<MOVE> & solutions, int board[], size_t boardLen, int maxPegs){
int newboard[18];
memcpy(newboard, board, min(sizeof(newboard), boardLen*sizeof(int));
...

memcpy一次复制一个字节,因此boardLen*sizeof(int).