首頁 > 後端開發 > C++ > 如何有效率地建立符合STL的自訂容器?

如何有效率地建立符合STL的自訂容器?

Susan Sarandon
發布: 2024-12-04 06:18:12
原創
180 人瀏覽過

How to Efficiently Create STL-Compliant Custom Containers?

編寫高效的符合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;
};
登入後複製

為了確保容器的完整性,請考慮使用以下測試類別:

struct tester {
  friend verify;
  static int livecount;

  tester() { ++livecount; }
  tester(const tester&) { ++livecount; }
  ~tester() { assert(livecount); --livecount; }
};
登入後複製

透過使用測試器測試您的容器對象,您可以驗證它是否遵循準則並按預期運行。

以上是如何有效率地建立符合STL的自訂容器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板