📜  C++ STL-list.emplace_back()函数(1)

📅  最后修改于: 2023-12-03 15:13:55.532000             🧑  作者: Mango

C++ STL-list.emplace_back() 函数

概述

std::list::emplace_back() 函数是 C++ STL 中 std::list 容器中的一个成员函数,用于在该链表的末尾添加一个元素。与 push_back() 函数不同的是,emplace_back() 函数直接在链表末尾构造一个元素,而不是先通过构造函数创建一个临时对象,再将其复制或移动到容器中。这样可以减少额外的构造、拷贝或移动操作。

函数声明
template<class... Args>
void emplace_back(Args&&... args);
形参
  • args: 用于初始化新插入元素的构造参数,可以是任意个数的参数。
返回值

该函数没有返回值。

示例
#include <iostream>
#include <list>

struct Person {
    std::string name;
    int age;
    Person(std::string name, int age): name(std::move(name)), age(age) {}
};

int main() {
    std::list<Person> people;
    people.emplace_back("Alice", 20);
    people.emplace_back("Bob", 25);
    for (auto& person: people) {
        std::cout << person.name << " is " << person.age << " years old." << std::endl;
    }
    return 0;
}

输出:

Alice is 20 years old.
Bob is 25 years old.
优势
  • 减少拷贝或移动操作,提高程序性能。
  • 支持可变数量的构造参数,更加灵活。
注意事项
  • 该函数仅适用于 std::list 容器。
  • 构造函数的参数类型必须与链表元素类型匹配。
  • 如果链表中的元素类型为指针,需要特别注意构造函数的调用方式。
总结

std::list::emplace_back() 函数是 std::list 容器中用于在链表末尾添加元素的高效成员函数,与 push_back() 函数的区别在于它直接在容器中构造新元素,避免了额外的拷贝或移动操作。这样的优势使得 emplace_back() 函数成为 C++ STL 中一个重要的容器操作方法。