効率的な STL 準拠コンテナの作成
STL (標準テンプレート ライブラリ) ガイドラインに従ってカスタム コンテナを作成すると、STL とのシームレスな統合が保証されます。エコシステムを構築し、予測可能で一貫した動作を保証します。ガイドラインは明示的に定義されていませんが、既存の STL コンテナの規則に従うことが設計の指針となります。
次のテンプレートは、STL コンテナの中核的な特性を示すサンプル疑似コンテナです。
template <class T, class A = std::allocator<T>> class X { // Required Declarations: typedef A allocator_type; typedef typename A::value_type value_type; typedef typename A::reference reference; typedef typename A::iterator iterator; typedef typename A::const_iterator const_iterator; // Required Iterators: class iterator { // Required Iterator Declarations and Operators: iterator(); iterator(const iterator&); ~iterator(); iterator& operator=(const iterator&); // Comparison Operators: bool operator==(const iterator&) const; bool operator!=(const iterator&) const; bool operator<(const iterator&) const; // Optional // Pointer Arithmetic Operators: iterator& operator++(); iterator operator++(int); // Optional iterator& operator--(); // Optional iterator operator--(int); // Optional iterator& operator+=(size_type); // Optional iterator operator+(size_type) const; // Optional iterator& operator-=(size_type); // Optional iterator operator-(size_type) const; // Optional // Dereference Operators: reference operator*() const; pointer operator->() const; }; class const_iterator { // Required Const Iterator Declarations and Operators: const_iterator(); const_iterator(const const_iterator&); const_iterator(const iterator&); ~const_iterator(); const_iterator& operator=(const const_iterator&); // Comparison Operators: bool operator==(const const_iterator&) const; bool operator!=(const const_iterator&) const; bool operator<(const const_iterator&) const; // Optional // Pointer Arithmetic Operators: const_iterator& operator++(); const_iterator operator++(int); // Optional const_iterator& operator--(); // Optional const_iterator operator--(int); // Optional const_iterator& operator+=(size_type); // Optional const_iterator operator+(size_type) const; // Optional const_iterator& operator-=(size_type); // Optional const_iterator operator-(size_type) const; // Optional // Dereference Operators: reference operator*() const; pointer operator->() const; }; // Optional Reverse Iterators: typedef std::reverse_iterator<iterator> reverse_iterator; typedef std::reverse_iterator<const_iterator> const_reverse_iterator; // Required Member Functions: X(); X(const X&); ~X(); X& operator=(const X&); iterator begin(); const_iterator begin() const; const_iterator cbegin() const; iterator end(); const_iterator end() const; const_iterator cend() const; };
コンテナの整合性を確保するには、テスト クラスの使用を検討してください。 like:
struct tester { friend verify; static int livecount; tester() { ++livecount; } tester(const tester&) { ++livecount; } ~tester() { assert(livecount); --livecount; } };
テスター オブジェクトを使用してコンテナをテストすることで、コンテナがガイドラインに従っており、期待どおりに動作することを確認できます。
以上がSTL 準拠のカスタム コンテナを効率的に作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。