【问题标题】:Shifting Elements to the Right After a Certain Index在某个索引后向右移动元素
【发布时间】:2016-09-20 02:42:49
【问题描述】:

我有一个数组_data,我正在尝试在某个position 的数组中添加一个数字。 position 索引之后的每个数字都应该向右移动一个索引。我在这样做时在概念上遇到了麻烦。

这是我现在所拥有的:

void list::add(int num, size_t position)
{
  for (int i = 0; i < _size; i++)
  {
     _data[position + i + 1] = _data[position + i];
  }
_data[position] = num; 
}

例如,假设 num = 9 和 position = 3,数组中的给定值是 {1, 3, 4, 5, 6, 7}。我希望它是{1, 3, 4, 9, 5, 6, 7}。然而,最终发生的事情是,它会抓取已被替换的数字并将其放回数组中。 (例如1, 3, 4, 9, 5, 5, 5}。

【问题讨论】:

  • 义人先移
  • 使用一个小数组,比如只有两个元素。拿一张纸。用铅笔画两个方格,在每个方格内填上“1”和“2”。那是你的数组有两个值。现在,一次一行地检查你的代码,并在纸上更新数组中的每个值,确切地说你的代码是如何做到的。您应该能够轻松找出哪里出错了。

标签: c++ arrays loops elements


【解决方案1】:

这取决于变量 _data 的类型:

如果是数组:

for (std::size_t i = _size - 1; i != position; --i)
{
   _data[i] = _data[i - 1];
}
_data[position] = num;

如果是向量:

_data.insert(_data.begin() + position, num);

无论如何,建议使用std::vector而不是原始数组,也不建议在变量名开头使用下划线

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-01
    • 2022-01-16
    • 2011-01-24
    • 2013-05-14
    • 1970-01-01
    • 2022-01-05
    • 2019-07-19
    • 1970-01-01
    相关资源
    最近更新 更多