Las pautas para escribir un contenedor STL personalizado
Al diseñar un nuevo contenedor que cumpla con las convenciones STL, es crucial seguir ciertas pautas para garantizar su correcto comportamiento e integración con la biblioteca STL.
Interfaz iteradora:
- Definir una clase de iterador con una etiqueta iterator_category adecuada, como input_iterator_tag, output_iterator_tag, forward_iterator_tag, bidireccional_iterator_tag o random_access_iterator_tag.
- Proporcione funciones miembro para comparación (==, !=), incremento/disminución (, --), aritmética ( , -) y desreferenciación (*, ->) operaciones.
Const Iterator:
- Proporcione una clase const_iterator anidada dentro de la clase iterador, lo que permite la iteración sobre contenedores constantes.
- Defina las mismas funciones miembro que el iterador no constante, pero con referencias constantes y punteros.
Comparación y asignación:
- Implementar operadores de comparación (==, !=, , =) para el contenedor en sí.
- Proporcione un operador de asignación que tome una referencia a otro contenedor.
Capacidad y Acceso:
- Incluye funciones miembro como vacía(), tamaño(), max_size() para administrar el tamaño y la capacidad del contenedor.
- Proporciona comenzar(), finalizar( ), cbegin(), cend(), rbegin(), rend(), crbegin() y crend() para acceder a iteradores que representan los elementos del contenedor.
- Defina funciones como front(), back(), at() y operator[] para acceder o modificar elementos.
Inserciones y eliminaciones:
- Implementar emplace_front() , emplace_back(), push_front(), push_back(), pop_front() y pop_back() para inserción y eliminación de elementos.
- Proporcionar Funciones miembro emplace(), insert() y erase() para insertar y eliminar elementos dentro del contenedor.
Varios:
- Incluir una función miembro swap() para intercambiar el contenido de dos contenedores del mismo tipo.
- Implemente get_allocator() para recuperar el asignador asociado con el contenedor.
- Defina una función swap() independiente para intercambiar contenedores del mismo tipo.
Pruebas:
Para garantizar Para verificar la confiabilidad de su contenedor, use una clase de prueba como la clase de prueba proporcionada para verificar que:
- La vida útil del objeto se administra correctamente.
- Las llamadas a funciones no modificar el estado del objeto inesperadamente.
- El contenedor funciona correctamente cuando se crea con y sin objetos globales.