-1

こんにちは、私はこのようなことをしようとしています:

私が持っている最初の反復で言う

  A={2,3,5} 

そして、2回目の反復では、

  A={2,3}

等々。最初の繰り返しの後で 3 番目の要素をゼロにしようとしましたが、アルゴリズムがうまくいきません。

各反復を実行するときに、C++ で配列内の要素を削除する方法は何ですか?

4

4 に答える 4

3

最良の (そして最も C++ に似た) アプローチは、配列からサイズ変更可能なコンテナー ( std::vector. このコンテナは動的にサイズ変更され、要素を最後またはコンテナ内の他の場所から削除できます。その後、コンテナーは正しいサイズにサイズ変更されます。

// Create a vector
std::vector<int> mydata(10, -1);
for (int i = 0 ; i != 10 ; i++)
    mydata[i] = i;
// Process all elements
for (int i = 0 ; i != mydata.size() ; i++) {
    cout << mydata[i] << endl;
}
// Remove the last element
mydata.pop_back();
// Process all elements - now the last one is not there
for (int i = 0 ; i != mydata.size() ; i++) {
    cout << mydata[i] << endl;
}
于 2013-01-27T19:41:28.267 に答える
0

スロットを備えた金属構造としてアレイを想像してください。スロットは変更できず、固定されています。

スロットを本で埋めます。これは、配列に値を入れるようなものです。

3 番目のスロットから 3 番目のブックを取り外します。スロットが固定された金属構造であるため、他の本は調整または移動されません。彼らは元の位置にいます。

空のスロットを「削除」するには、次のスロットから本を引き出し、空のスロットに置きます。「空の」スロットが最後になるか、残りのすべての本が移動されるまで繰り返します。これはstd::vector、アイテムを削除する方法です。

リンクされたリストは、スロットを削除する際により効率的です。リンクされたリストは、一方の端にフックがあり、もう一方の端に文字列がある一連のコンテナーと考え​​てください。1 つのコンテナーのフックにのみ紐を結ぶことができます。文字列をたどると、コンテナの順序がわかります。コンテナを取り外すには、前のコンテナの紐をほどき、次のコンテナのフックに結び、コンテナの紐をほどきます。残りの要素をコピーまたは移動する必要はありません。文字列を移動しただけです。

取り出したコンテナは追跡しないと紛失する恐れがあります。この状況はメモリ リークと呼ばれ、メモリ内のアイテムが失われます。

于 2013-01-27T20:54:03.097 に答える
0

C++ では、通常の配列の要素を削除できません。リストまたはベクターを使用している場合は別ですが、プレーン配列では新しい配列のみを作成し、「削除」したい値なしで古い配列から値をコピーできます。そして、「新しい配列」が「古い配列」であると言います。

于 2013-01-27T19:41:49.150 に答える
0

C++ スタイルの場合: std:vector を使用し、それに続いてthisを使用します。
C スタイルの場合: 動的ヒープ配列 (new/delete/realloc) を使用します。

于 2013-01-27T19:43:40.410 に答える