码迷,mamicode.com
首页 > 编程语言 > 详细

C++STL----容器高效使用

时间:2018-01-05 16:04:54      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:位置   deque   insert   单元   释放   span   高效   share   原则   

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,其不是引用计数的智能指针
 
 

C++STL----容器高效使用

标签:位置   deque   insert   单元   释放   span   高效   share   原则   

原文地址:https://www.cnblogs.com/ladawn/p/8203764.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!