1

だから私はこのような配列を持っています[1,2,3,4,5,6,7,8,9]この配列の最大値は15です。私がやりたいことは、数値インデックスを呼び出す場合に int を挿入することです。そこで、そこからインデックス 4 である 5 を呼び出すと、すべてがシフトオーバーし、新しい値が挿入され[,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;
        }
4

3 に答える 3

5

問題はvalues[i] = values[i+1];、値を 1 ステップ左にシフトする (インデックス 4 の値がインデックス 6 になる) ことですが、すべての値を 1 ステップ右にシフトしたい場合です。したがって、割り当てを逆にする必要があります。

これにより、値を右に移動すると、右の位置にあった以前の値が失われるという問題が生じます。これを防ぐには、アレイの後ろから始めることができます。

于 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 に答える