编写自定义 STL 容器的指南
设计符合 STL 约定的新容器时,遵循某些指南至关重要以确保其正确行为并与 STL 库集成。
迭代器接口:
- 定义一个具有适当iterator_category标记的迭代器类,例如input_iterator_tag、output_iterator_tag、forward_iterator_tag、bidirect_iterator_tag或random_access_iterator_tag。
- 提供用于比较的成员函数(= =, !=), 递增/递减 ( , --), 算术 ( , -) 和解引用 (*, ->) 操作。
Const Iterator:
- 提供一个嵌套在迭代器类中的 const_iterator 类,允许对常量容器进行迭代。
- 定义与非常量迭代器相同的成员函数,但使用常量引用
比较和赋值:
- 实现比较运算符(==、!=、、= ) 为容器本身。
- 提供一个引用另一个容器的赋值运算符container.
容量和访问:
- 包含成员函数,如empty()、size()、max_size()来管理容器大小
- 提供begin(), end(), cbegin(), cend(), rbegin(), rend(), crbegin() 和 crend() 用于访问表示容器元素的迭代器。
- 定义 front()、back()、at() 和 operator[] 等函数来访问或修改元素。
插入和删除:
- 实现emplace_front()、emplace_back()、push_front()、push_back()、pop_front()和pop_back()用于元素插入和删除。
- 提供emplace()、insert()和erase()成员用于插入和删除元素的函数容器。
其他:
- 包含一个 swap() 成员函数,用于交换相同类型的两个容器的内容。
- 实现 get_allocator() 来检索与容器关联的分配器。
- 定义一个独立的 swap()用于交换相同类型容器的函数。
测试:
为了确保容器的可靠性,请使用像提供的测试器类这样的测试类验证:
- 对象生命周期得到正确管理。
- 函数调用不会修改对象的状态出乎意料。
- 在使用或不使用全局对象创建时,容器都能正常运行。