12

您好我正在尝试使用 std::copy() 函数来复制二维数组。我想知道是否可以这样做!我不断收到“分段错误”,但数组被正确复制。我已经尝试为复制功能减去一些并在最终情况下添加一些,但没有成功。

    const int rows = 3;
    const int columns = 3;
    int myint[rows][columns]={{1,2,3},{4,5,6},{7,8,9}};
    int favint[rows][columns];
    std::copy(myint, myint+rows*columns,favint);

很明显“myint+rows*columns”是不正确的,事实证明这个值对应于整行,所以“myint+rows*columns=1”意味着它将复制整个第一行。如果“myint+rows*columns=2”它复制前两行等。有人可以为我解释一下这个操作吗?

4

1 回答 1

30
std::copy(myint, myint+rows*columns,favint);

应该:

std::copy(&myint[0][0], &myint[0][0]+rows*columns,&favint[0][0]);

原型std::copy

template< class InputIt, class OutputIt >
OutputIt copy( InputIt first, InputIt last, OutputIt d_first );

请注意,指向数组元素的指针可以包装为迭代器。

于 2013-09-10T01:58:47.690 回答