美文网首页C++ 11
018 使用 emplace 操作

018 使用 emplace 操作

作者: 赵者也 | 来源:发表于2020-02-20 17:29 被阅读0次

    C++ 11 引入了三个新成员 —— emplace_front、emplace 和 emplace_back,这些操作构造而不是拷贝元素。这些操作分别对应 push_front、insert 和 push_back,允许我们将元素放置在容器头部、指定位置之前或容器尾部。

    当调用 push 或 insert 成员函数时,我们将元素类型的对象传递给它们,这些对象被拷贝到容器中。而我们调用一个 emplace 成员函数时,则是将参数传递给元素类型的构造函数。emplace 成员使用这些参数在容器管理的内存空间中直接构造元素。例如,假定 c 保存 SalesData 元素:

        // 在 c 的末尾构造一个 SalesData 对象
        // 使用三个参数的 SalesData 构造函数
        c.emplace_back("test0", 25, 99.99);
        // 错误:没有接受三个参数的 push_back 版本
        c.push_back("test0", 25, 99.99);
        // 正确:创建一个临时的 SalesData 对象传递给 push_back
        c.push_back(SalesData("test0", 25, 99.99));
    

    其中对 emplace_back 的调用和第二个 push_back 调用都会创建新的 SalesData 对象。在调用 emplace_back 时,会在容器管理的内存空间中直接创建对象。而调用 push_back 则会创建一个局部临时对象,并将其压入容器中。

    emplace 函数的参数根据元素类型而变化,参数必须与元素类型的构造函数相匹配:

        // 在 c 的末尾构造一个 SalesData 对象
        // 使用 SalesData 的默认构造函数
        c.emplace_back();
        // 使用两个参数的 SalesData 构造函数
        c.emplace_back(iter, "test0");
        // 使用三个参数的 SalesData 构造函数
        c.emplace_back("test0", 25, 99.99);
    

    相关文章

      网友评论

        本文标题:018 使用 emplace 操作

        本文链接:https://www.haomeiwen.com/subject/qcmbwqtx.html