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

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
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) 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
  1. 1,0 1,1 1,2 (desde C++11) Lineal para std::array y std::inplace_vector
  2. Siempre lineal para std::forward_list
  3. 3,0 3,1 3,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í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 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