1

所以我有一个类似这样[1,2,3,4,5,6,7,8,9]的数组,这个数组的最大值是 15 个值。如果我调用数字索引,我想要做的是插入一个 int。所以说我调用 5 ,它是索引 4 从那里一切都转移并插入了新值[,1,2,3,4,0,5,6,7,8,9]我该怎么做?

我试过了,但我似乎无法正确处理它,它会覆盖该值。诠释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;
        }
4

3 回答 3

5

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

这会产生一个问题,一旦您将一个值向右移动,右侧位置上的前一个值就会丢失。为防止这种情况,您可以从阵列的背面开始。

于 2013-10-10T11:23:57.193 回答
1

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

for(int i=(num-1);i<MAX;i++)
{
int temp=values[i];
values[i+1]=temp;   
}
values[num-1]=0;
于 2013-10-10T11:34:24.170 回答
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;
}
于 2013-10-10T11:11:09.903 回答