問題タブ [erase-remove-idiom]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1536 参照

c++ - vector.erase() と remove_if() に問題がある

remove_if を使用する前は、remove を使用していました。したがって、vec = {1, 2, 2, 2, 5} があり、すべての 2 を削除したい場合は、次のようにします。

削除が行われているときにベクトルを反復することは不可能であり、非論理的であるため、これは機能しません。

それで、remove_if() を発見しました。ただし、何らかの理由で、クラスのコンテキスト内で動作させることができません。これが私のコードです:

a が int で bool 値が必要なため、void delete は機能しないと推測していますが、remove_if の 3 番目のパラメーターとして「int a がこのベクトルにある場合は true を返す」を表現する方法がわかりません。そして、 void delete_even が機能することを期待しますが、取得します

0 投票する
0 に答える
779 参照

c++ - C++ で txt.file/string から句読点を削除する

こんにちは、プログラマーの皆さん。質問があります。うまくいけば、あなたの 1 人が答えてくれます。次のコードは、txt.file が文字列変数に入れられた後、文字列全体 (文字の配列) から句読点が削除され、小文字のアルファベットに設定されることを示しています。どちらの関数ステートメントも正常に機能しましたが、引用符とダッシュ (' " '、' - ') は文字列から削除されませんでした。while ループの 2 番目のステートメントは、私がコメントアウトしたもので、引用符を削除するためのテストでした。文字列からですが、それもうまくいきませんでした. 文字列を 'cout' すると、別のテキスト ファイルに出力されます. 提供された情報が役立つかどうかはわかりませんが、アドバイスをいただければ幸いです。

0 投票する
2 に答える
13355 参照

c++ - ベクトルから要素を削除するための std::remove_if のより良い代替手段はありますか?

特定のプロパティを持つ要素をstd::vectorコンテナーまたは他のコンテナーから削除するタスクは、機能的なスタイルの実装に適しています。ループ、メモリの割り当て解除、データの移動を正しく行う必要はありません。

ただし、C++ でこれを行う標準的な方法は、次のイディオムのようです。

この例では、ゼロ未満のすべての要素を整数ベクトルから削除します。

醜いだけでなく、間違った使い方も簡単だと思います。std::remove_if渡された反復子のみを取得するため、ベクトルのサイズを (その名前が示すように) 変更できないことは明らかです。しかし、私を含む多くの開発者は、最初はそれを理解していません。

では、これを達成するためのより安全で、できればよりエレガントな方法はありますか? そうでない場合、なぜですか?

0 投票する
1 に答える
527 参照

c++ - unordered_map erase() での再ハッシュ

unordered_mapを実行するときに再ハッシュを実行できるかどうかについては、完全には明確ではありませんerase()

insert()すべてのイテレータと参照を無効にする間に再ハッシュが発生する可能性があることは明らかです。

http://en.cppreference.com/w/cpp/container/unordered_map/insert

しかしerase()、消去されたものを除いて、すべてのイテレータと参照を保持しているようです:

http://en.cppreference.com/w/cpp/container/unordered_map/erase

ただし、その最後のページと標準は、erase()最悪の実行時間はであることを示していO(size)ます。イテレータを無効にする方法でコンテナを変更せずに完了するまでに直線的な時間がかかる操作はどれですか?

この投稿は、消去中に反復子が無効になることを示唆しています: http://kera.name/articles/2011/06/iterator-invalidation-rules-c0x/

また、将来の提案で の再ハッシュが許可されることもどこかで読みましたerase()。本当?

実際に再ハッシュが発生した場合、古い反復および消去アルゴリズムは間違っていますよね?

0 投票する
2 に答える
437 参照

c++ - 最初の括弧 "(" と最後の括弧 "(" の間の文字列内のすべての文字を消去します。これらの括弧も含まれます C++

最初の括弧「(」と最後の括弧「(」の間のすべての文字を削除するのに問題があります。これを機能させるために使用するテストプログラムを次に示しますが、成功しません...

上記の例では、私の目標は (少なくとも) 文字列を取得することです。

元の文字列から抽出された

より正確には、値を抽出したい

計算で使用するために double に変換します。

削除に成功しました

それは一種の定数値だからです。

ありがとうございました!