在某个索引后向右移动元素

Posted

技术标签:

【中文标题】在某个索引后向右移动元素【英文标题】: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”。那是你的数组有两个值。现在,一次一行地检查你的代码,并在纸上更新数组中的每个值,确切地说你的代码是如何做到的。您应该能够轻松找出哪里出错了。 【参考方案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而不是原始数组,也不建议在变量名开头使用下划线

【讨论】:

以上是关于在某个索引后向右移动元素的主要内容,如果未能解决你的问题,请参考以下文章

web中js的运用

ArrayListVectorLinkedListHashMapHashTable的存储性能和特性

在最后一个元素处停止 Pathview 移动

说出ArrayList,Vector, LinkedList的存储性能和特性

java 插入排序

FLASH AS3 二维数组如何查找某个元素的索引?