vector详讲(三)实例

C++移动语义与emplace用法
本文探讨了C++中的移动语义如何通过std::move提高性能,避免不必要的对象复制。并介绍了emplace_back与push_back的区别,前者直接在容器内部分配空间创建对象,提升效率。

移动语义:

push语句有时候会通过移动语义来提高性能

#include <iostream>
#include <vector>

class Element
{
public:
    Element(int im,std::string string) :
            Im(im),mString(string)
    {

    }

    virtual ~Element()
    {}

private:
    int Im;
    std::string mString;
};

int main()
{
    std::vector<Element> myIntVec;
    Element myEle(10,"abcd");
    myIntVec.push_back(myEle);

    return 0;
}
myIntVec不是临时对象,所以在执行这条语句的时候,会对 myIntVec 进行复制副本,所以为了避免这种复制,可以这样。
myIntVec.push_back(std::move(myEle));

这样做的后果就是再也不能调用myEle了,

在push_back(const  T&& val );这样的定义,可以这样:

myIntVec.push_back(Element(10,"abcd"));
emplace操作

在C++中emplace的意思就是 "放置到位"的意思。std::vector的方法有emplace_back();这个方法与push_back()不同就是他不会复制和移动任何数据,只会在容器内部分配空间,就地创建对象。

myIntVec.emplace_back(12,"cedc");
emplace_back()可接受数目可变的参数。empalce_back()和使用移动语句的push_back()之间的差异取决于编译器实现这些操作的方式;
size(),capacity()和reserve()
首先明白这几个方法的意思:myIntVec.size()返回的是  myIntVec当前的容器数目,myIntVec.capacity()返回的是总体容量。myIntVec.reserve(size_t size),意思是预分配空间
接下来给出一个实例:




转载于:https://www.cnblogs.com/boost/p/10376439.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值