Namespaces
Variants

deduction guides for std::deque

From cppreference.net

Definiert in Header <deque>
template < class InputIt,

class Alloc = std:: allocator <
typename std:: iterator_traits < InputIt > :: value_type > >
deque ( InputIt, InputIt, Alloc = Alloc ( ) )

- > deque < typename std:: iterator_traits < InputIt > :: value_type , Alloc > ;
(1) (seit C++17)
template < ranges:: input_range R,

class Alloc = std:: allocator < ranges:: range_value_t < R >> >
deque ( std:: from_range_t , R && , Alloc = Alloc ( ) )

- > deque < ranges:: range_value_t < R > , Alloc > ;
(2) (seit C++23)
1) Dieser Deduction Guide wird für deque bereitgestellt, um die Ableitung aus einem Iteratorbereich zu ermöglichen. Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn InputIt die Anforderungen eines LegacyInputIterator erfüllt und Alloc die Anforderungen eines Allocator erfüllt.
2) Dieser Deduction Guide wird für deque bereitgestellt, um die Ableitung von einem std::from_range_t -Tag und einem input_range zu ermöglichen.

Hinweis: Das Ausmaß, in dem die Bibliothek feststellt, dass ein Typ nicht die Anforderungen eines LegacyInputIterator erfüllt, ist nicht spezifiziert, außer dass mindestens integrale Typen nicht als Eingabe-Iteratoren qualifizieren. Ebenso ist das Ausmaß, in dem sie feststellt, dass ein Typ nicht die Anforderungen eines Allocator erfüllt, nicht spezifiziert, außer dass mindestens der Member-Typ Alloc::value_type existieren muss und der Ausdruck std:: declval < Alloc & > ( ) . allocate ( std:: size_t { } ) wohlgeformt sein muss, wenn er als nicht ausgewerteter Operand behandelt wird.

Hinweise

Feature-Test Makro Wert Std Funktion
__cpp_lib_containers_ranges 202202L (C++23) Ranges-basierte Konstruktion und Einfügung; Überladung (2)

Beispiel

#include <deque>
#include <vector>
int main()
{
    std::vector<int> v = {1, 2, 3, 4};
    // verwendet expliziten Deduction Guide um std::deque<int> abzuleiten
    std::deque x(v.begin(), v.end());
    // leitet std::deque<std::vector<int>::iterator> ab
    // erste Phase der Überladungsauflösung für Listeninitialisierung wählt den Kandidaten
    // der aus dem Initializer-List-Konstruktor synthetisiert wurde; zweite Phase wird nicht durchgeführt
    // und Deduction Guide hat keine Wirkung
    std::deque y{v.begin(), v.end()};
}