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.
Contenido |
[editar] Requisitos
[editar] Leyenda
-
T
, un tipo de elemento; -
C
, un tipo Contenedor que contiene elementos de tipoT
; - a y b, objetos de tipo
C
; - i y j, valores de tipo
C::iterator
(que pueden ser const) ; - rv, una expresión pr-valor de tipo
C
.
[editar] 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
|
[editar] 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 a a 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
-
i
yj
, objetos del tipo deliterator
de 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.
[editar] 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 |
[editar] Carreras de datos de los contenedores
Véase seguridad de hilos de los contenedores.
[editar] Otros requisitos
C
(Contenedor)
T
(Tipo)
[editar] 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_iterator podí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. |
[editar] Véase también
Documentación de C++ para Biblioteca de contenedores
|