STL中容器大小的计算
2016-07-24 14:58
459 查看
1、vecotr
常量时间
2、list
需要遍历整个链表
3、dequeue
迭代器中重载“-”,因为deque采用了一个map来存储每个缓冲区的地址,因此需要乘以缓冲区大小
class vector { public: size_type size() const { return size_type(end() – begin()); } iterator begin() { return _M_start; } iterator end() { return _M_finish; } protected: _Tp* _M_start; _Tp* _M_finish; _Tp* _M_end_of_storage; };
常量时间
2、list
class list{ public: size_type size() const { size_type __result = 0; distance(begin(), end(), __result); return __result; } }; template <class _InputIterator, class _Distance> inline void distance(_InputIterator __first, _InputIterator __last, _Distance& __n) { __STL_REQUIRES(_InputIterator, _InputIterator); __distance(__first, __last, __n, iterator_category(__first)); } template <class _InputIterator, class _Distance> inline void __distance(_InputIterator __first, _InputIterator __last, _Distance& __n, input_iterator_tag) { while (__first != __last) { ++__first; ++__n; } }
需要遍历整个链表
3、dequeue
class deque { public: size_type size() const { return _M_finish – _M_start; } protected: iterator _M_start; iterator _M_finish; }; struct _Deque_iterator { typedef _Deque_iterator<_Tp, _Tp&, _Tp*> iterator; typedef ptrdiff_t difference_type; typedef _Deque_iterator _Self; difference_type operator-(const _Self& __x) const { return difference_type(_S_buffer_size()) * (_M_node – __x._M_node – 1) + (_M_cur – _M_first) + (__x._M_last – __x._M_cur); } };
迭代器中重载“-”,因为deque采用了一个map来存储每个缓冲区的地址,因此需要乘以缓冲区大小
相关文章推荐
- 理解Java垃圾回收
- ArcEngine错误提示
- UVA11374_Airport Express
- hdu 5750 数学+预处理
- poj 1611 并查集
- 彻底弄懂css中单位px和em,rem的区别
- Android源代码编译笔记(支持5.x及以上版本) - Linux篇
- mysql【java.sql.SQLException: No tables used】原因及解决办法
- HDU1426 Sudoku Killer(DFS暴力)
- Leetcode Word Search
- linux的一些简单命令
- TTL & OS
- Oracle11g数据库win8.1系统安装配置图文教程
- 欢迎使用CSDN-markdown编辑器
- js中window.onload添加事件
- POJ 2236 Wireless Network
- HTTP深入浅出 http请求
- CodeForces 474C - Captain Marmot
- 响应式布局 BFC
- 简单选择排序