如何将数组中的元素向右移动?

Posted

技术标签:

【中文标题】如何将数组中的元素向右移动?【英文标题】:How to shift elements in an array to the right? 【发布时间】:2020-06-13 19:40:05 【问题描述】:

我是编程新手,现在正在学习 c++。 我有一个对象数组,我想在另外两个对象之间添加一个新对象。我创建了一个函数,将元素索引处的数组向右移动,但似乎删除了其他元素,而不是只插入新元素。

void Storage::ShiftProductsRight(int index)

    if(index == max_size - 1)
    
        cout<<"No more place in storage! "<<endl;
        // array[max_size-1] = Product();
        return;
    

    Product temp;
    for (int i = index + 1; i < max_size-1; ++i)
    
        temp = array[max_size-1];
        array[max_size-1] = array[i];
        array[i] = temp;
    


【问题讨论】:

C++ 有 std::vector 为您处理这个问题。 你在代码的什么地方插入了一个新元素? 我想你可能正在寻找std::rotate..? 比较indexmax_size - 1如何告诉你数组已满?即使您尝试在索引 0 处插入,数组也可能已满。 虽然我可以看到代码是错误的,但很难提供帮助,因为不清楚变量的含义。 max_size 是什么? 【参考方案1】:

如何将数组中的元素向右移动?

执行此操作的算法是:从最后一个元素开始,将其移动到新位置,向后迭代并重复直到要插入新元素的索引

标准库中有这个算法的实现。它被称为std::move_backwards

【讨论】:

以上是关于如何将数组中的元素向右移动?的主要内容,如果未能解决你的问题,请参考以下文章

数组循环数组

C# 在数组中定位值并将其向右移动

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

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

如何将numpy数组中的相同元素移动到子数组中

翻转问题--旋转数组