c++ push 和 emplace

优先使用emplace,因为emplace性能更好

首先使用 push_back() 方法添加创建好的元素,可以看出使用到了拷贝构造函数

int main() {
    using namespace std;
    vector<Person> person;
    auto p = Person(1); // >: Construct a person.1
    person.push_back(p);
    /**
     * >: Copy-Construct1 因为容器扩容,需要把前面的元素重新添加进来,因此需要拷贝
     */
}

然后再使用 emplace_back() 函数添加元素进来:

int main() {
    using namespace std;
    vector<Person> person;
    auto p = Person(1); // >: Construct a person.1
    person.emplace_back(move(p)); // >: Move-Construct1
    person.emplace_back(2);
    /**
     * >: Construct a person.2  // 构建一个新的元素
     * >: Move-Construct1       // 拷贝之前的元素过来,这个时候用的是 Person(const Person &&p)
     */
}

可以看到直接使用构造参数列表来添加元素的方法,它会使用到了移动构造函数 move 。这也是 emplace_back() 方法的一大特色。

© 2021 hanbaoaaa record.浙ICP备20005263号
asdad
联系方式 asdasd
2021-5-8 4:19
sss
回复数 (0) 点击展开
加载更多

新增评论

称呼
联系方式
邮箱(选填)
内容

提交

取消