从函数参数[C++]复制整数数组 我有一个C++函数,它是从这样开始的< /P> void findSolutions(vector<MOVE> & solutions, int board[], int maxPegs){ int newboard[18]; copy(begin(board), end(board), begin(newboard)); ... more code ... }

从函数参数[C++]复制整数数组 我有一个C++函数,它是从这样开始的< /P> void findSolutions(vector<MOVE> & solutions, int board[], int maxPegs){ int newboard[18]; copy(begin(board), end(board), begin(newboard)); ... more code ... },c++,arrays,copy,C++,Arrays,Copy,如何复制从参数传入的数组?谢谢,std::copy在迭代器方面是有效的。在指针上调用begin/end,即board不会生成迭代器,相反,board是一个数组,它衰减为指针,可以直接用作迭代器。 您可以通过以下方式简单地使用std::copy std::copy(board, board + len, newboard); 我假设len是您要复制的长度,并确保newboard有能力存储len个元素。您不能安全地执行此操作。数组在传递到函数时衰减为指针。您将无法确保源数组有足够的字节来读取,除非

如何复制从参数传入的数组?谢谢,std::copy在迭代器方面是有效的。在指针上调用begin/end,即board不会生成迭代器,相反,board是一个数组,它衰减为指针,可以直接用作迭代器。 您可以通过以下方式简单地使用std::copy

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

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

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

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

MycPy一次复制一个字节,因此BoADLL**siZoFiTe.

可以使用MeMCPY?@ SPIKOOSTD::拷贝可能编译成一个MeCPY调用,调用ItsSTD::CopySn。这就是为什么C++有封装数据和行为的类。编写一个包含电路板信息的类。为什么要将std::vector用于解决方案而不是电路板?您可以创建多维向量。其他有帮助的阅读:@user4581301谢谢您的跟进。刚刚编辑了答案。如果调用者以字节为单位传递数组的大小,这将起作用,这有点不寻常。在调用memcpy时,传递元素的数量和执行boardLen*sizeofint更为常见。@user4581301谢谢您的输入。但是,在aep的回答中,我们如何确保董事会有len元素可以读取?若线路板为空PTR,会发生什么情况?我们从哪里得到len?@感谢您的投入。我相应地改变了我的答案。伦可能和博德伦来自同一个地方;如果调用方撒谎,这两种实现都将失败。如果board为空,UB将同时生成aep的答案和此答案。对于board来说,引用std::array可能是一个更好的选择,因为它几乎消除了所有的问题。有更好的方法来实现这一点。几乎所有的容器和赋值操作符都不存在任何问题。
void findSolutions(vector<MOVE> & solutions, int board[], size_t boardLen, int maxPegs){
    int newboard[18];
    memcpy(newboard, board, min(sizeof(newboard), boardLen*sizeof(int));
    ...