Пространства имён
Варианты
Действия

std::list::emplace_back

Материал из cppreference.com
< cpp‎ | container‎ | list

template< class... Args >
void emplace_back( Args&&... args );
(начиная с C++11)
Добавляет новый элемент в конец контейнера. Элемент построен на месте, т.е. не копировать или перемещать операции. Конструктор элемент называется с точно такими же аргументами, которые передаются функции.
Оригинал:
Appends a new element to the end of the container. The element is constructed in-place, i.e. no copy or move operations are performed. The constructor of the element is called with exactly the same arguments that are supplied to the function.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

Итераторы и указатели остаются в рабочем состоянии.

Содержание

[править] Параметры

args -
Аргументы направить в конструкторе элемента
Оригинал:
arguments to forward to the constructor of the element
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Возвращаемое значение

(Нет)
Оригинал:
(none)
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Сложность

Постоянное.
Оригинал:
Constant.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

[править] Пример

Следующий код использует emplace_back добавить объект типа President в std::list. Он демонстрирует, как emplace_back передает параметры в President конструктор и показывает, как с помощью emplace_back позволяет избежать дополнительного копирования или перемещения требуется при использовании push_back .
Оригинал:
The following code uses emplace_back to append an object of type President to a std::list. It demonstrates how emplace_back forwards parameters to the President constructor and shows how using emplace_back avoids the extra copy or move operation required when using push_back.
Текст был переведён автоматически через Google Translate.
Вы можете проверить и исправить перевод. Для инструкций кликните сюда.

#include <list>
#include <string>
#include <iostream>
 
struct President
{
    std::string name;
    std::string country;
    int year;
 
    President(std::string && p_name, std::string && p_country, int p_year)
        : name(std::move(p_name)), country(std::move(p_country)), year(p_year)
    {
        std::cout << "I am being constructed.\n";
    }
    President(President&& other)
        : name(std::move(other.name)), country(std::move(other.country)), year(other.year)
    {
        std::cout << "I am being moved.\n";
    }
    President& operator=(const President& other) = default;
};
 
int main()
{
    std::list<President> elections;
    std::cout << "emplace_back:\n";
    elections.emplace_back("Nelson Mandela", "South Africa", 1994);
 
    std::list<President> reElections;
    std::cout << "\npush_back:\n";
    reElections.push_back(President("Franklin Delano Roosevelt", "the USA", 1936));
 
    std::cout << "\nContents:\n";
    for (President const& president: elections) {
        std::cout << president.name << " was elected president of "
                  << president.country << " in " << president.year << ".\n";
    }
    for (President const& president: reElections) {
        std::cout << president.name << " was re-elected president of "
                  << president.country << " in " << president.year << ".\n";
    }
}

Вывод:

emplace_back:
I am being constructed.
 
push_back:
I am being constructed.
I am being moved.
 
Contents:
Nelson Mandela was elected president of South Africa in 1994.
Franklin Delano Roosevelt was re-elected president of the USA in 1936.

[править] См. также

Добавляет элемент в конец
(public функция-член) [edit]