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,其不是引用计数的智能指针
     
     
  • 相关阅读:
    angular js 多处获取ajax数据的方法
    回调函数(在原生ajax中应用) 事件监听 与promise的应用介绍
    AngularJS Scope(作用域)
    angular js 模型 (ng-model指令)
    angular js 指令 ng-model与 no-repeat的使用 ng-各种指令 创建自定义指令 限制使用指令 restrict的不同取值
    Ka的回溯编程练习 Part2|八皇后问题和N皇后问题
    Ka的回溯编程练习 Part1|整划什么的。。
    Ka的递归编程练习 Final.Part8|回溯前传二|排列组合
    Ka的递归编程练习 Part7|回溯前传一|素数环!
    Ka的递归编程练习 Part6|简单背包问题,拒绝动规从我做起
  • 原文地址:https://www.cnblogs.com/ladawn/p/8203764.html
Copyright © 2011-2022 走看看