Namespaces
Variants

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

From cppreference.net
template < class ... Args >
constexpr iterator emplace ( const_iterator position, Args && ... args ) ;
(depuis C++26)

Insère un nouvel élément dans le conteneur directement avant pos . Généralement, l'élément est construit en utilisant le placement new pour construire l'élément in-situ à l'emplacement fourni par le conteneur. Les arguments args... sont transmis au constructeur via std:: forward < Args > ( args ) ... .

Table des matières

Paramètres

pos - itérateur avant lequel le nouvel élément sera construit
args - arguments à transmettre au constructeur de l'élément
Exigences de type
-
T doit satisfaire aux exigences de MoveAssignable , MoveInsertable et EmplaceConstructible .

Valeur de retour

Un itérateur vers l'élément inséré.

Complexité

Linéaire en fonction de la distance entre pos et end() .

Exceptions

Lance std::bad_alloc si avant l'invocation size ( ) == capacity ( ) . La fonction n'a aucun effet ( garantie de sécurité d'exception forte ).

Toute exception levée par l'initialisation de l'élément inséré ou par toute LegacyInputIterator opération. Les éléments dans [ 0 , pos ) ne sont pas modifiés.

Exemple

#include <cassert>
#include <inplace_vector>
#include <new>
#include <utility>
int main()
{
    using P = std::pair<int, int>;
    using I = std::inplace_vector<P, 3>;
    auto nums = I{{0, 1}, {2, 3}};
    auto it = nums.emplace(nums.begin() + 1, -1, -2);
    assert((*it == P{-1, -2}));
    assert((nums == I{P{0, 1}, {-1, -2}, {2, 3}}));
    try
    {
        nums.emplace(nums.begin(), 1, 3); // lève une exception : pas d'espace
    }
    catch(const std::bad_alloc& ex)
    {
        std::cout << ex.what() << '\n';
    }
}

Sortie possible :

std::bad_alloc

Voir aussi

insère des éléments
(fonction membre publique)
construit un élément en-place à la fin
(fonction membre publique)