Namespaces
Variants

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

From cppreference.net

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

Ändert die Größe des Containers, um count Elemente zu enthalten:

  • Wenn count gleich der aktuellen Größe ist, erfolgt keine Aktion.
  • Wenn die aktuelle Größe größer als count ist, wird der Container auf seine ersten count Elemente reduziert.
  • Wenn die aktuelle Größe kleiner als count ist, dann:
1) Zusätzliche Kopien von T ( ) (bis C++11) default-inserted Elemente (seit C++11) werden angehängt.
2) Zusätzliche Kopien von value werden angehängt.

Inhaltsverzeichnis

Parameter

count - neue Größe des Containers
value - der Wert, mit dem die neuen Elemente initialisiert werden
Typanforderungen
-

Wenn die folgende Bedingung erfüllt ist, ist das Verhalten undefiniert:

1) T ist nicht DefaultInsertable oder MoveInsertable in deque .
2) T ist nicht CopyInsertable in deque .
(seit C++11)

Komplexität

Linear in der Differenz zwischen der aktuellen Größe und count .

Hinweise

Wenn die Wertinitialisierung in Überladung ( 1 ) unerwünscht ist, zum Beispiel wenn die Elemente von Nicht-Klassen-Typ sind und das Nullsetzen nicht benötigt wird, kann dies durch Bereitstellung eines benutzerdefinierten Allocator::construct vermieden werden.

Beispiel

#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);
}

Ausgabe:

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

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 679 C++98 resize() übergab value als Wert übergibt als const-Referenz
LWG 1418 C++98 das Verhalten von resize ( size ( ) ) war nicht spezifiziert spezifiziert
LWG 2033 C++11 1. Elemente wurden durch Verwendung von erase() [1] entfernt
2. T musste nicht MoveInsertable sein
1. verwendet pop_back()
2. erforderlich
LWG 2066 C++11 Überladung ( 1 ) hatte nicht die Exception
Safety-Garantie der Überladung ( 2 )
hinzugefügt
LWG 2160 C++11 Elemente wurden durch Verwendung von pop_back() [2] entfernt
aufgrund der Lösung von LWG 2033
spezifiziert die Methode
zum Entfernen von Elementen nicht
  1. erase() kann Elemente in der Mitte eines deque entfernen, daher muss der Werttyp MoveAssignable sein, damit die nachfolgenden Elemente nach vorne verschoben werden können, um die Lücke zu füllen. Allerdings kann resize() nur Elemente am Ende des deque entfernen, wodurch MoveAssignable unnötig wird.
  2. Das Entfernen von Elementen mittels pop_back() impliziert, dass die Elemente von hinten nach vorne entfernt werden müssen.

Siehe auch

gibt die maximal mögliche Anzahl von Elementen zurück
(öffentliche Elementfunktion)
gibt die Anzahl der Elemente zurück
(öffentliche Elementfunktion)
prüft, ob der Container leer ist
(öffentliche Elementfunktion)