STL アルゴリズム内でカスタム クラスを操作する場合、効率的なスワップ操作を保証するために swap メソッドを提供することが必要になります。これを達成するには、次の 3 つの主なアプローチがあります。
これには、クラス自体内でメンバー スワップ関数を定義することが含まれます。このアプローチでは引数依存検索 (ADL) が可能ですが、SFINAE.
自立型スワップ関数は、クラスと同じ名前空間内で定義できます。この関数は、swap キーワードが修飾なしで使用される場合に、ADL を通じて検出されます。
の明示的な特殊化 std::swap 関数テンプレートを特定のクラス用に特殊化することは可能ですが、これは一般的に推奨されません。代わりに、クラスの名前空間に独立したスワップ関数を提供することをお勧めします。
// Using the free-standing swap function approach namespace Foo { class Bar {}; // dummy void swap(Bar& lhs, Bar& rhs) { // ... } } // Algorithm that uses ADL to find the swap function template<class T> void foo(T& lhs, T& rhs) { using std::swap; // enable 'std::swap' if no other 'swap' is found through ADL swap(lhs, rhs); // unqualified call using ADL to find 'Foo::swap' }
特定の要件に応じて、 STL アルゴリズムにスワップ機能を提供するための複数の実行可能なアプローチがあります。一般的な使用法では、クラスの名前空間内で独立したスワップ関数を定義すると、堅牢で柔軟なソリューションが提供されます。
以上がSTL アルゴリズム内でカスタム クラス オブジェクトを効率的に交換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。