zoukankan      html  css  js  c++  java
  • C++STL----容器高效使用

    1. 容器中对象拷贝高效、防剥离发生的方法:
             使容器包含指针而不是对象。(ps:STL容器是在创建拷贝,相比数组,是动态创建,节省时间和空间
     
    2. 总是调用empty()而不是size==0来判断容器是否为空:
             empty()对所有STL容器都是常数时间操作,而size()对某些容器(如list)是线性时间操作,size()更耗时。
     
    3. vector、list、deque的比较:
            (1)vector是连续存储结构,相比数组,多了动态内存管理。
                    优点是:支持高效的随机访问,支持尾端高效插入/删除。占用内存小。
                    缺点是:首端和中间位置的插入/删除效率低下。
                 (ps:vector扩充内存的步骤:①分配一块更大的新内存 ②将原内存中数据复制到新内存 ③将原内存空间释放给系统
            (2)duque是连续存储结构,相比vector,deque维护了容器的首端地址,故支持高效的首端插入/删除操作。
                    优点是:支持高效的随机访问,支持首尾端高效插入/删除。
                    缺点是:占用的内存大。
            (3)list是非连续存储结构,是双向链表结构,每个节点维护其前后节点的地址,故支持前/后向遍历。
                    优点是:不使用连续内存完成动态操作,支持任意位置高效的随机插入/删除。
                    缺点是:不能进行内部随机访问(不支持[]和.at()),占用的内存大。
            (4)三者使用原则:
                    ① 如果需要高效的随机存取,而不在乎插入/删除的效率,使用vector
                    ② 如果需要大量高效的插入/删除,而不在乎随机存取时间,使用list
                    ③ 如果需要高效的随机存取,还要大量的首尾端插入/删除,使用deque
     
    4. 区间成员函数要优于对应的单元素成员函数:
               区间成员函数,即:insert(iterator begin, iterator end)、erase(iterator begin, iterator end)、assign(iterator begin, iterator end)
               单元素成员函数,即:push_back(元素)、push(元素)、insert(元素)、erase(元素)
               使用区间成员函数的好处:代码简洁、容易表达意图、效率高。
     
    5. 容器中的元素类型是new出来指针类型,要注意:
               需要记得容器使用完后,人工delete指针指向内存。或者用带有引用计数的智能指针shared_ptr作为容器元素,可以不用人工释放内存,避免内存泄露。(ps:切记不能使用auto_ptr,其不是引用计数的智能指针
     
     
  • 相关阅读:
    PhpStorm如何连接外部服务器

    hello,bokeyuan
    pyspark SparkSession及dataframe基本操作
    spark2.2 中文文档
    广告推荐加入图像特征
    docker教程
    DSSM算法-计算文本相似度
    navivate 下载
    save——model模块保存和载入使用简单例子
  • 原文地址:https://www.cnblogs.com/ladawn/p/8203764.html
Copyright © 2011-2022 走看看