Namespaces
Variants

std::queue<T,Container>::queue

Depuis fr.cppreference.net

 
 
 
 
queue() : queue(Container()) {}
(1) (depuis C++11)
explicit queue( const Container& cont = Container() );
(2) (jusqu'à C++11)
explicit queue( const Container& cont );
(depuis C++11)
explicit queue( Container&& cont );
(3) (depuis C++11)
queue( const queue& other );
(4) (déclaré implicitement)
queue( queue&& other );
(5) (depuis C++11)
(déclaré implicitement)
template< class InputIt >
queue( InputIt first, InputIt last );
(6) (depuis C++23)
template< class Alloc >
explicit queue( const Alloc& alloc );
(7) (depuis C++11)
template< class Alloc >
queue( const Container& cont, const Alloc& alloc );
(8) (depuis C++11)
template< class Alloc >
queue( Container&& cont, const Alloc& alloc );
(9) (depuis C++11)
template< class Alloc >
queue( const queue& other, const Alloc& alloc );
(10) (depuis C++11)
template< class Alloc >
queue( queue&& other, const Alloc& alloc );
(11) (depuis C++11)
template< class InputIt, class Alloc >
queue( InputIt first, InputIt last, const Alloc& alloc );
(12) (depuis C++23)
template< container-compatible-range<T> R>
queue( std::from_range_t, R&& rg );
(13) (depuis C++23)
template< container-compatible-range<T> R, class Alloc >
queue( std::from_range_t, R&& rg, const Alloc& alloc );
(14) (depuis C++23)

Construit un nouveau conteneur sous-jacent de l'adaptateur de conteneur à partir de diverses sources de données.

1) Constructeur par défaut. Initialise par valeur le conteneur.
2) Copie-construit le conteneur sous-jacent c avec le contenu de cont. C'est aussi le constructeur par défaut.(jusqu'à C++11)
3) Déplace-construit le conteneur sous-jacent c avec std::move(cont).
4) Constructeur de copie. L'adaptateur est copie-construit avec le contenu de other.c.
5) Constructeur de déplacement. L'adaptateur est construit avec std::move(other.c).
6) Construit le conteneur sous-jacent c avec le contenu de la plage [firstlast). Cette surcharge participe à la résolution de surcharge seulement si InputIt satisfait LegacyInputIterator.
7-12) Ces constructeurs participent à la résolution de surcharge seulement si std::uses_allocator<Container, Alloc>::value est true, c'est-à-dire si le conteneur sous-jacent est un conteneur compatible allocateur (vrai pour tous les conteneurs de la bibliothèque standard qui peuvent être utilisés avec queue).
7) Construit le conteneur sous-jacent en utilisant alloc comme allocateur, comme par c(alloc).
8) Construit le conteneur sous-jacent avec le contenu de cont et en utilisant alloc comme allocateur, comme par c(cont, alloc).
9) Construit le conteneur sous-jacent avec le contenu de cont en utilisant la sémantique de déplacement tout en utilisant alloc comme allocateur, comme par c(std::move(cont), alloc).
10) Construit l'adaptateur avec le contenu de other.c et en utilisant alloc comme allocateur, comme par c(other.c, alloc).
11) Construit l'adaptateur avec le contenu de other en utilisant la sémantique de déplacement tout en utilisant alloc comme allocateur, comme par c(std::move(other.c), alloc).
12) Construit le conteneur sous-jacent avec le contenu de la plage [firstlast) en utilisant alloc comme allocateur, comme par c(first, last, alloc). Cette surcharge participe à la résolution de surcharge seulement si InputIt satisfait LegacyInputIterator.
13) Construit le conteneur sous-jacent avec ranges::to<Container>(std::forward<R>(rg)).
14) Construit le conteneur sous-jacent avec ranges::to<Container>(std::forward<R>(rg), alloc).

Paramètres

alloc - allocateur à utiliser pour toutes les allocations de mémoire du conteneur sous-jacent
other - un autre adaptateur de conteneur à utiliser comme source pour initialiser le conteneur sous-jacent
cont - conteneur à utiliser comme source pour initialiser le conteneur sous-jacent
first, last - la paire d'itérateurs définissant la plage source des éléments à initialiser
rg - une plage compatible avec les conteneurs , c'est-à-dire une input_range dont les éléments sont convertibles en T
Exigences de type
-
Alloc doit satisfaire aux exigences de Allocator .
-
Container doit satisfaire aux exigences de Container . Les constructeurs prenant un paramètre d'allocateur participent à la résolution de surcharge seulement si Container satisfait aux exigences de AllocatorAwareContainer .
-
InputIt doit satisfaire aux exigences de LegacyInputIterator .

Complexité

Identique à l'opération correspondante sur le conteneur encapsulé.

Notes

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_adaptor_iterator_pair_constructor 202106L (C++23) Constructeurs de paire d'itérateurs pour std::queue et std::stack ; surcharges ( 6 ) et ( 12 )
__cpp_lib_containers_ranges 202202L (C++23) Construction et insertion compatibles avec les gammes ; surcharges ( 13 ) et ( 14 )

Exemple

#include <cassert>
#include <deque>
#include <iostream>
#include <memory>
#include <ranges>
#include <queue>
int main()
{
    std::queue<int> c1;
    c1.push(5);
    assert(c1.size() == 1);
    std::queue<int> c2(c1);
    assert(c2.size() == 1);
    std::deque<int> deq{3, 1, 4, 1, 5};
    std::queue<int> c3(deq); // surcharge (2)
    assert(c3.size() == 5);
# ifdef __cpp_lib_adaptor_iterator_pair_constructor
    const auto il = {2, 7, 1, 8, 2};
    std::queue<int> c4{il.begin(), il.end()}; // C++23, (6)
    assert(c4.size() == 5);
# endif
# if __cpp_lib_containers_ranges >= 202202L
    // C++23, surcharge (13)
    auto c5 = std::queue(std::from_range_t, std::ranges::iota(0, 42));
    assert(c5.size() == 42);
    // même effet avec la syntaxe pipe, utilise en interne la surcharge (13)
    auto c6 = std::ranges::iota(0, 42) | std::ranges::to<std::queue>();
    assert(c6.size() == 42);
    std::allocator<int> alloc;
    // C++23, surcharge (14)
    auto c7 = std::queue(std::from_range_t, std::ranges::iota(0, 42), alloc);
    assert(c7.size() == 42);
    // même effet avec la syntaxe pipe, utilise en interne la surcharge (14)
    auto c8 = std::ranges::iota(0, 42) | std::ranges::to<std::queue>(alloc);
    assert(c8.size() == 42);
# endif
}

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
P0935R0 C++11 default constructor was explicit made implicit

Voir aussi

assigne des valeurs à l'adaptateur de conteneur
(fonction membre publique)