【问题标题】:std::copy two dimensional arraystd::copy 二维数组
【发布时间】:2013-09-10 01:50:35
【问题描述】:

您好,我正在尝试使用 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" 它复制前两行等。有人可以为我解释一下这个操作吗?

【问题讨论】:

  • 这段代码在我的机器上运行得非常好。您确定是您的这部分代码导致了分段错误吗?

标签: c++ arrays


【解决方案1】:
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 );

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

【讨论】:

  • @Mahesh 不同之处在于 myint 是指向 myint[0][0] 的指针,而 &myint[0][0] 是指向 myint[0][0] 的指针。大不同。
  • @lulyon 他们是一样的。二维数组也被解析为指向第一个元素的指针。
  • @texasbruce 否。二维数组被解析为指向第一个从第一个元素开始的一维数组的指针。
  • @lulyon cout &lt;&lt; myint &lt;&lt; endl; cout &lt;&lt; &amp;myint[0][0] &lt;&lt; endl; 和输出:0x7fffdb8969b0 0x7fffdb8969b0
  • @texasbruce myint 本身不是指针;它在传递给函数(或分配给指针)后转换为指针。
猜你喜欢
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 2012-04-05
  • 2012-09-28
  • 1970-01-01
  • 1970-01-01
  • 2021-10-12
相关资源
最近更新 更多