在某个索引后向右移动元素
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
而不是原始数组,也不建议在变量名开头使用下划线
【讨论】:
以上是关于在某个索引后向右移动元素的主要内容,如果未能解决你的问题,请参考以下文章
ArrayListVectorLinkedListHashMapHashTable的存储性能和特性