問題タブ [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.
c++ - remove_if を使用すると要素はどうなりますか?
私はどのように機能するかを理解しようとしていますremove_if
(<<
オーバーロードされています)。そのために、「C」で始まるすべての文字列を remove_if したい:
出力:Initial vector: Python C++ C Java C# | Size = 5
それから私は書きます:
出力 2 :After remove_if: Python Java C C# | Size = 5
私が理解していること:残っているべき要素が最初に削除され、*it
現在は等しい"C"
質問: はどうなり"C++"
ますか? 交換した場合"Java"
、その理由
出力3を与えます:C C#
そしてそうではありません"C", "Java", "C#"
か?
c++ - 逆イテレータで消去削除イディオムが機能しない理由
私の目的は、この質問の解決策を試すことでした:ベクター内のすべての空の要素を end から削除します。消去削除イディオムを使用します。
アイデアは、指定された文字列で空 (空白に等しい) である最後から始まるすべての要素を削除することstd::vector<std::string>
です。空でない要素が見つかった場合、要素の削除は停止する必要があります。
例:
削除後:
これが私が試した解決策です:
これによりエラーが発生しました:
次に、ここの作業について読みstd::vector::erase()
ました: Does vector::erase not work with reverse iterator?
そしてコードを変更しました:
今回はコンパイルしましたが、出力=元のベクトルが得られました。
誰でも説明できますか:
- なぜこれが起こったのですか?
- 可能であれば、どうすれば修正できますか?
c++ - C++ で文字の配列から文字を削除する
文字列から部分文字列を削除する方法を作成しようとしています。それは char 形式なので、喜んで文字列に与えられる便利な手段を使用できません。私はそれを検索する方法を知っています。インデックスを見つけることはできますが、文字を削除するのは私にとって少し冒険でした。誰かが何かアイデアを持っているなら、私はそれを大いに感謝します. ありがとう。
性格上Replaceメソッドは使えません。入れ子になったループを試しましたが、 と の非互換性のために行き詰まりchar
ますint
。誰かに提案があれば、私はすべて耳にします。スタック コミュニティに感謝します。
c++ - erase-remove イディオムの場合、コンテナーの末尾を指す 2 番目のパラメーターが必要なのはなぜですか?
次のコードを考えてみましょう ( cppreference.comから取得し、わずかに変更):
なぜ2番目のパラメータが必要なのerase
ですか? (つまりstr1.end()
、この場合。)
remove
toによって返されるイテレータを提供できないのはなぜerase
ですか? 消去するコンテナーの最後の要素についても通知する必要があるのはなぜですか?
ここでの落とし穴はerase
、2 番目のパラメーターなしで呼び出すこともできますが、明らかに間違った結果になることです。
コンテナの最後を の 2 番目のパラメータとして渡したくないユースケースはありますerase
か?
erase-remove イディオムの 2 番目のパラメーターを省略すると、erase
常にエラーになりますか、それとも有効なことでしょうか?