zoukankan      html  css  js  c++  java
  • vector详讲(三)实例

    移动语义:

    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),意思是预分配空间
    接下来给出一个实例:




  • 相关阅读:
    android.mk文件里的通配符
    vi常用命令
    如何用ndk-stack察看android崩溃堆栈
    初识lua
    c++标准库中几个常见的数据结构的区别和应用规则
    玩转ubuntu FAQ
    c++0x新特性实例(比较常用的)
    cocos2d-x的Android工程开启c++0x特性
    随笔 — 致2018.
    CPU或内存占用过高时,发生了什么
  • 原文地址:https://www.cnblogs.com/boost/p/10376439.html
Copyright © 2011-2022 走看看