Namespaces
Variants

std::inplace_vector<T,N>::try_emplace_back

Depuis fr.cppreference.net
 
 
 
 
template< class... Args >
constexpr std::optional<reference> try_emplace_back( Args&&... args );
(depuis C++26)

Ajoute conditionnellement un objet de type T à la fin du conteneur.

Si size() == capacity() est true, il n'y a aucun effet. Sinon, ajoute un objet de type std::forward<Args>(args)... construit par initialisation directe non-liste avec T.

Aucun itérateur ou référence n'est invalidé, sauf end(), qui est invalidé si l'insertion a lieu.

Paramètres

args - arguments à transmettre au constructeur de l'élément
Exigences de type
-
T doit être EmplaceConstructible dans inplace_vector à partir de std:: forward < Args > ( args ) ... .

Valeur de retour

std:: addressof ( back ( ) ) si size ( ) < capacity ( ) , nullptr sinon.

Complexité

Constante.

Exceptions

Toute exception levée par l'initialisation de l'élément inséré. Si une exception est levée pour quelque raison que ce soit, cette fonction n'a aucun effet ( garantie forte de sûreté face aux exceptions ).

Notes

Macro de test de fonctionnalité Valeur Norme Fonctionnalité
__cpp_lib_inplace_vector 202603L (C++26) Meilleur type de retour (std::optional<reference> au lieu de pointer) pour try_push_back et try_emplace_back

Exemple

#include <cassert>
#include <complex>
#include <inplace_vector>
#include <optional>

int main()
{
    using namespace std::complex_literals;
    using C = std::complex<double>;
    using I = std::inplace_vector<C, 3>;
    auto v = I{1.0 + 2.0i, 3.0 + 4.0i};

    std::optional<C&> c = v.try_emplace_back(5.0, 6.0);
    assert(*c == 5.0 + 6.0i);
    assert((v == I{1.0 + 2.0i, 3.0 + 4.0i, 5.0 + 6.0i}));

    c = v.try_emplace_back(7.0, 8.0); // no space => no insertion
    assert(c == std::nullopt);
    assert((v == I{1.0 + 2.0i, 3.0 + 4.0i, 5.0 + 6.0i}));
}

Voir aussi

construit un élément en place à la fin
(fonction membre publique)
ajoute un élément à la fin
(fonction membre publique)
ajoute une plage d'éléments à la fin
(fonction membre publique)
tente d'ajouter une plage d'éléments à la fin
(fonction membre publique)
construit inconditionnellement un élément en place à la fin
(fonction membre publique)
ajoute inconditionnellement un élément à la fin
(fonction membre publique)
supprime le dernier élément
(fonction membre publique)
crée un std::back_insert_iterator du type déduit de l'argument
(fonction template)