Namespaces
Variants

std::deque<T,Allocator>:: resize

From cppreference.net

void resize ( size_type count ) ;
(1) (constexpr desde C++26)
void resize ( size_type count, const value_type & value ) ;
(2) (constexpr desde C++26)

Redimensiona el contenedor para contener count elementos:

  • Si count es igual al tamaño actual, no hace nada.
  • Si el tamaño actual es mayor que count , el contenedor se reduce a sus primeros count elementos.
  • Si el tamaño actual es menor que count , entonces:
1) Se añaden copias adicionales de T ( ) (until C++11) elementos insertados por defecto (since C++11) .
2) Se añaden copias adicionales de value .

Contenidos

Parámetros

count - nuevo tamaño del contenedor
value - el valor con el que inicializar los nuevos elementos
Requisitos de tipo
-

Si se cumple la siguiente condición, el comportamiento es indefinido:

2) T no es CopyInsertable en deque .
(desde C++11)

Complejidad

Lineal en la diferencia entre el tamaño actual y count .

Notas

Si la inicialización por valor en la sobrecarga ( 1 ) no es deseable, por ejemplo, si los elementos son de tipo no-clase y no se necesita poner a cero, puede evitarse proporcionando un personalizado Allocator::construct .

Ejemplo

#include <deque>
#include <iostream>
void print(auto rem, const std::deque<int>& c)
{
    for (std::cout << rem; const int el : c)
        std::cout << el << ' ';
    std::cout << '\n';
}
int main()
{
    std::deque<int> c = {1, 2, 3};
    print("The deque holds: ", c);
    c.resize(5);
    print("After resize up to 5: ", c);
    c.resize(2);
    print("After resize down to 2: ", c);
    c.resize(6, 4);
    print("After resize up to 6 (initializer = 4): ", c);
}

Salida:

The deque holds: 1 2 3
After resize up to 5: 1 2 3 0 0
After resize down to 2: 1 2
After resize up to 6 (initializer = 4): 1 2 4 4 4 4

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 679 C++98 resize() pasaba value por valor pasa por referencia constante
LWG 1418 C++98 el comportamiento de resize ( size ( ) ) no estaba especificado especificado
LWG 2033 C++11 1. los elementos se eliminaban usando erase() [1]
2. T no se requería que fuera MoveInsertable
1. usa pop_back()
2. requerido
LWG 2066 C++11 la sobrecarga ( 1 ) no tenía la garantía de seguridad
de excepciones de la sobrecarga ( 2 )
añadida
LWG 2160 C++11 los elementos se eliminaban usando pop_back() [2]
debido a la resolución de LWG 2033
no especifica el método
de eliminación de elementos
  1. erase() puede eliminar elementos en medio de un deque , por lo que se requiere que el tipo de valor sea MoveAssignable para que los elementos que siguen a la sección eliminada puedan moverse hacia adelante para llenar el vacío. Sin embargo, resize() solo puede eliminar elementos al final del deque , haciendo que el MoveAssignable sea innecesario.
  2. Eliminar elementos usando pop_back() implica que los elementos deben eliminarse de atrás hacia adelante.

Véase también

devuelve el número máximo posible de elementos
(función miembro pública)
devuelve el número de elementos
(función miembro pública)
comprueba si el contenedor está vacío
(función miembro pública)