0

A[5] には要素 {a,b,c,d,e} があります

A[2] が空になります。すべてを右に移動して配列を部分的に埋め、空のスペースを左端に残す最良の方法は何ですか。ロジックとループでそれを行う方法を知っています。それを行うコマンドがあるかどうか疑問に思っていましたか?

4

1 に答える 1

1

Cスタイルの配列には、「空の」要素の概念はありません。要素には常に値があります。ある値が空の要素を示していると判断するかもしれませんが、それはあなた次第です。「空の」プレースホルダー値に名前が付けられている場合はempty、次のように実行できます。

auto empty_it = std::find(std::begin(arr), std::end(arr), empty);
std::rotate(empty_it, empty_it + 1, std::end(arr));

これにより、最初の空の要素が配列の後ろに移動します。

std::vector、、、std::listまたはその他の標準ライブラリコンテナを使用する方がはるかに良いでしょう。これらは、要素の移動を気にすることなく、コンテナから要素を削除するための機能を提供します。例えば:

std::vector<int> v = {0, 1, 2, 3, 4, 5, 6};
v.erase(v.begin() + 3);
for (auto& x : v) {
    std::cout << x << " ";
}

これは印刷されます0 1 2 4 5 6。は3コンテナから削除されました。

于 2013-02-05T22:44:03.897 に答える