如何将值插入数组的中间

时间:2013-10-10 11:03:28

标签: c++

所以我有一个这样的数组[1,2,3,4,5,6,7,8,9]这个数组的最大值是15个值。如果我调用数字索引,我想要做的是插入一个int。所以说我从那里调用5是索引4,所有内容都会移位并插入新值[,1,2,3,4,0,5,6,7,8,9]我将如何处理这个问题?

我尝试了这个,但我似乎无法正确地覆盖它的价值。 int xxx;

        cin >> num;
        if (num >= 0 && num <= 15) {
            for (int i = num; i < MAX; i++) {
                values[i] = values[i+1];
                cout << values[i+1] << endl;
            }
            viewVal(values, position);
            cout << endl << endl;
        }

3 个答案:

答案 0 :(得分:5)

问题是values[i] = values[i+1];将值向左移一步(索引4现在具有索引6的值),但是您希望将所有值向右移动一步。因此,您必须撤消分配。

这会产生一个问题,即一旦将值移到右侧,右侧位置的前一个值就会丢失。为了防止这种情况,您可以从数组的后面开始。

答案 1 :(得分:1)

在C ++中无法更改普通数组的大小。我可以建议使用std::list,它支持恒定时间插入。

#include <iostream>
#include <list>
#include <algorithm>

int main()
{
    std::list<int> l{1, 2, 3, 4, 5, 6, 7, 8, 9};

    int n;
    std::cin >> n;

    auto it = std::find(l.begin(), l.end(), n);

    if(it != l.end())
    {
        l.insert(it, 0);
        for(const auto& elem: l)
        {
            std::cout << elem << ' ';
        }
        std::cout << std::endl;
    }
    else
    {
        std::cout << "No such element" << std::endl;
    }

    return 0;
}

答案 2 :(得分:1)

希望这会有所帮助,这里所有元素首先向右移动,然后将新数字插入到数组中。

for(int i=(num-1);i<MAX;i++)
{
int temp=values[i];
values[i+1]=temp;   
}
values[num-1]=0;