c++中的emplace_back 与push_back

  • emplace_back

emplace_back 是 C++ STL 中 std::vector 和 std::list 等容器提供的一个成员函数,用于在容器的末尾直接构造一个新元素,而不是先创建一个临时对象再进行拷贝或移动操作。这样可以避免不必要的对象拷贝和移动,提高性能。

下面是一个简单示例,演示了如何使用 emplace_back 方法向 std::vector 中添加新元素:

#include <iostream>
#include <vector>

struct Person {
    std::string name;
    int age;

    Person(const std::string& n, int a) : name(n), age(a) {}
};

int main() {
    std::vector<Person> people;

    // 使用 emplace_back 直接构造新元素
    people.emplace_back("Alice", 25);
    people.emplace_back("Bob", 30);

    // 打印 vector 中的元素
    for (const auto& person : people) {
        std::cout << "Name: " << person.name << ", Age: " << person.age << std::endl;
    }

    return 0;
}

在这个示例中:

  • Person 结构体表示一个人,包含姓名和年龄。
  • people.emplace_back("Alice", 25) 和 people.emplace_back("Bob", 30) 直接在 std::vector 中构造新的 Person 对象,避免了额外的拷贝和移动操作。
  • 最后通过循环遍历 people,打印每个人的姓名和年龄。

使用 emplace_back 可以提高代码的性能,并且使得代码更加简洁和清晰。希望这个示例能帮助你理解如何使用 emplace_back

  • push_back

push_back 是 C++ STL 中 std::vector 和 std::list 等容器提供的一个成员函数,用于在容器的末尾添加一个新元素。与 emplace_back 不同,push_back 接受一个已存在的对象作为参数,会进行元素的拷贝或移动操作。

下面是一个简单示例,演示了如何使用 push_back 方法向 std::vector 中添加新元素:

#include <iostream>
#include <vector>

struct Person {
    std::string name;
    int age;

    Person(const std::string& n, int a) : name(n), age(a) {}
};

int main() {
    std::vector<Person> people;

    // 使用 push_back 添加新元素
    Person alice("Alice", 25);
    people.push_back(alice);

    // 直接使用临时对象作为参数
    people.push_back(Person("Bob", 30));

    // 打印 vector 中的元素
    for (const auto& person : people) {
        std::cout << "Name: " << person.name << ", Age: " << person.age << std::endl;
    }

    return 0;
}

在这个示例中:

  • Person 结构体表示一个人,包含姓名和年龄。
  • 首先通过 Person alice("Alice", 25) 创建一个 Person 对象,然后使用 people.push_back(alice) 将其添加到 std::vector 中。
  • 使用 people.push_back(Person("Bob", 30)) 直接在 push_back 中创建临时的 Person 对象,并添加到 std::vector 中。
  • 最后通过循环遍历 people,打印每个人的姓名和年龄。

push_back 是一个常用的方法,用于向容器中添加新元素。相比于 emplace_back,它需要现有对象进行拷贝或移动,因此在性能上可能略逊一筹。希望这个示例能帮助你理解如何使用 push_back

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值