10 例として: string s = "123"; s.assign(find(s.begin(),s.end(),'2'), s.end()); 上記のコードの動作は定義されていますか?それとも未定義の動作につながりますか? c++ — アルタボ ソース
5 はい。このバージョンの割り当ては次のように定義されます template<class InputIterator> constexpr basic_string& assign(InputIterator first, InputIterator last); 制約:InputIteratorは、入力反復子として適格な型です。 効果:次と同等:return assign(basic_string(first、last、get_allocator())); これは、変更が行われる前に計算された一時的なものを示しています。 — Aプログラマー ソース 「に等しい」は、実際の一時ファイルを作成する必要があることを意味しません。ただし、セマンティクスは同じでなければなりません。また、示されているバージョンは自己割り当てに対して安全であるため、実際の実装も安全でなければなりません。 — MSalters @MSalters。同意した。私はそれについてコメントするつもりでしたが、アロケータの使用量のどれだけを取り除くことができるかを判断しようとして迷いました。 — AProgrammer これは文字列に固有のものであることに注意してください。たとえば、ベクターの場合はUBになります。 — TC @TC、標準を引用できますか? — アドラー 1 @Adler、ベクターの説明が参照するこの表を参照してください。 — AProgrammer