Requisitos denominados de C++: Contenedor
Un Contenedor es un objeto que se usa para almacenar otros objetos y encargarse de la gestión de la memoria usada por los objetos que contiene.
Requisitos
Leyenda
T, un tipo de elemento;C, un tipo Contenedor que contiene elementos de tipoT;ayb, objetos de tipoC;iyj, valores de tipoC::iterator(que pueden serconst) ;rv, una expresión pr-valor de tipoC.
Tipos Miembro
| Nombre | Tipo | Requisitos |
|---|---|---|
C::value_type |
T}} | ConstruiblePorCopia (hasta C++11)Borrable (desde C++11) |
C::reference |
T& |
|
C::const_reference |
const T& |
|
C::iterator |
Iterador cuyo tipo de valor es T | IteradorDeAvanceLegado; convertible a const_iterator.
|
C::const_iterator |
Iterador constante cuyo tipo de valor es T | IteradorDeAvanceLegado. |
C::difference_type |
Entero con signo | Debe ser igual que iterator_traits::difference_type para iterator y para const_iterator
|
C::size_type |
Entero sin signo | Suficientemente grande para representar todos los valores positivos de difference_type
|
Funciones y operadores miembro
| Expresión | Tipo de retorno | Semántica | Condiciones | Complejidad | ||||
|---|---|---|---|---|---|---|---|---|
C() |
C |
Crea un contenedor vacío | Post:C().empty() == true |
Constante | ||||
C(a) |
C |
Crea una copia de a |
Pre: T debe ser Insertable por copia Post: a == C(a) |
Lineal | ||||
C(rv)(desde C++11) |
C |
Mueve rv |
Post: igual al valor que rv tenía antes de esta construcción |
Constante[1] | ||||
a = b |
C& |
Destruye o asigna por copia todos los elementos de aa partir de los elementos de b |
Post: a == b |
Lineal | ||||
a = rv(desde C++11) |
C& |
Destruye o asigna por movimiento todos los elementos de a a partir de los elementos de rv |
Post: Si a y rv no se refieren al mismo objeto, a es igual al valor que rv tenía antes de esta asignación |
Lineal | ||||
a.~C() |
void |
Destruye todos los elementos de a y libera toda la memoria |
Lineal | |||||
a.begin() |
(const_)iterator |
Iterador al primer elemento de a |
Constante | |||||
a.end() |
(const_)iterator |
Iterador a un elemento después del último elemento de a |
Constante | |||||
a.cbegin()(desde C++11) |
const_iterator |
const_cast<const C&>(a).begin() |
Constante | |||||
a.cend()(desde C++11) |
const_iterator |
const_cast<const C&>(a).end() |
Constante | |||||
i <=> j(desde C++20) |
strong_ordering |
Comparación de tres vías de iteradores del contenedor | C::iteratorcumple con los requisitos de iterador de acceso aleatorio |
Constante | ||||
a == b |
Convertible a bool |
|
Pre: T debe ser ComparableEnIgualdad |
Constante[2] si a.size() !=b.size(); de lo contrario, lineal
| ||||
a != b |
Convertible a bool |
!(a == b) |
Lineal | |||||
a.swap(b) |
void |
Intercambia los valores de a y b |
Constante[1][3] | |||||
swap(a, b) |
void |
a.swap(b) |
Constante[1] | |||||
a.size() |
size_type |
std::distance(a.begin(), a.end()) |
Constante[3] | |||||
a.max_size() |
size_type |
b.size() donde b es el contenedor más grande posible |
Constante[3] | |||||
a.empty() |
bool}} | a.begin() == a.end() |
Constante | |||||
| Notas | ||||||||
Dado
iyj, objetos del tipo deliteratorde un contenedor,
en las expresiones i == j, i != j, i < j, i <= j, i >= j, i > j, i - j, uno o ambos pueden reemplazarse por un objeto de tipo const_iterator del contenedor que haga referencia al mismo elemento sin cambio en la semántica.
Requisitos opcionales de contenedor (desde C++20)
Las siguientes operaciones solamente se proporcionan para algunos tipos de contenedores.
Si los iteradores pasados a std::lexicographical_compare_three_way cumplen con Iterador Constexpr, las operaciones descritas a continuación se implementan mediante funciones constexpr.
| Categoría | Descripción |
|---|---|
| Expresión | a <=> b
|
| Retornos | std::lexicographical_compare_three_way(a.begin(), a.end(),b.begin(), b.end(),/*síntesis de tres vías*/)
|
| Resultado | /*resultado síntesis de tres vías*/<C::value_type>
|
| Precondiciones | O bien T modela three_way_comparable, o < está definido para valores de tipo T (que puede ser const) y < es una relación de ordenamiento total.
|
| Complejidad | Lineal |
Carreras de datos de los contenedores
Véase seguridad de hilos de los contenedores.
Otros requisitos
C (Contenedor)
T (Tipo)
Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 179 | C++98 | Los tipos iterator y const_iterator podían ser incomparables.
|
Se requiere que sean comparables. |
| LWG 276 | C++98 | Se requería que T fuera AsignablePorCopia
|
se requiere que T seaConstruiblePorCopia |
| LWG 322 | C++98 | No se especificaba los tipos de valores de iterator y const_iterator
|
especificado como T
|
| LWG 774 | C++98 | No había ningún requisito sobre swap(a, b)
|
añadido |
| LWG 883 | C++98 | a.swap(b) se definía como swap(a, b),resultando una definición circular |
definido como el intercambio de valores de a y b
|
| LWG 1319 | C++98 | iterator y const_iteratorpodían no tener garantía multipaso |
se requiere que satisfagan los requisitos de IteradorDeAvanceLegado |
| LWG 2263 | C++11 | La resolución del asunto Asunto LWG 179 se retiró accidentalmente en C++11. | Se restauró. |
| LWG 2839 | C++11 | No se permitía la auto asignación por movimiento de los contenedores estándar. | Se permite, pero el resultado no está especificado. |
Véase también
Documentación de C++ para Biblioteca de contenedores
|