Espacios de nombres
Variantes
Acciones

Requisitos denominados de C++:Contenedor

De cppreference.com
< cpp‎ | named req
 
 
Requisitos denominados de C++
Números aleatorios
Concurrencia
(C++11)
(C++11)
Rangos
Vista multidimensional
Otros

 

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 tipo T;
  • 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

NombreTipoRequisitos
C::value_typeT}}ConstruiblePorCopia(hasta C++11)Borrable(desde C++11)
C::referenceT&
C::const_referenceconst T&
C::iteratorIterador cuyo tipo de valor es TIteradorDeAvanceLegado;
convertible a const_iterator.
C::const_iteratorIterador constante cuyo tipo de valor es TIteradorDeAvanceLegado.
C::difference_typeEntero con signo Debe ser igual que iterator_traits::difference_type para iterator y para const_iterator
C::size_typeEntero sin signoSuficientemente grande para representar todos los valores positivos de difference_type

[editar]Funciones y operadores miembro

ExpresiónTipo de retornoSemánticaCondicionesComplejidad
C()CCrea un contenedor vacío Post:C().empty()
==true
Constante
C(a)CCrea una copia de aPre: T debe ser Insertable por copia
Post: a == C(a)
Lineal
C(rv)
(desde C++11)
CMueve rvPost: igual al valor que rv tenía antes de esta construcciónConstante[1]
a = bC&Destruye o asigna por copia todos los elementos de a
a partir de los elementos de b
Post: a == bLineal
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()voidDestruye todos los elementos de a y libera toda la memoriaLineal
a.begin()(const_)iteratorIterador al primer elemento de aConstante
a.end()(const_)iteratorIterador a un elemento después del último elemento de aConstante
a.cbegin()
(desde C++11)
const_iteratorconst_cast<const C&>(a).begin()Constante
a.cend()
(desde C++11)
const_iteratorconst_cast<const C&>(a).end()Constante
i <=> j
(desde C++20)
strong_orderingComparación de tres vías de iteradores del contenedorC::​iteratorcumple con los requisitos de iterador de acceso aleatorioConstante
a == b Convertible a bool
a.size()== b.size()&&

    std::equal(a.begin(),

    a.end(), b.begin())
(hasta C++14)
std::equal(a.begin(),
    a.end(), b.begin(), b.end())
(desde C++14)
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)voida.swap(b) Constante[1]
a.size()size_typestd::distance(a.begin(), a.end()) Constante[3]
a.max_size()size_typeb.size() donde b es el contenedor más grande posible Constante[3]
a.empty()bool}} a.begin()== a.end() Constante
Notas
  1. 1,01,11,2(desde C++11) Lineal para std::array y std::inplace_vector
  2. Siempre lineal para std::forward_list
  3. 3,03,13,2(hasta C++11) No es estrictamente constante

Dado

  • i y j, objetos del tipo del iterator 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íaDescripció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 sea
ConstruiblePorCopia
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
close