编写高效的符合 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中文网其他相关文章!