【转】std::list中size()方法的时间复杂度 标准STL容器List(Linux GNU,sgi的实现),其size()函数的要遍历所有list中的元素来获得链表长度,来看看它的实现: 1size_type size()const{2size_type __result =0;3distance(begin(), end(), __result);4return__result;5} 其通过调用distance()函数来计算元素...
*/ size_type size() const _GLIBCXX_NOEXCEPT { return std::distance(begin(), end()); } ... } /* bits/stl_iterator_base_funcs.h */ template<typename _InputIterator> inline typename iterator_traits<_InputIterator>::difference_type distance(_InputIterator __first, _InputIterator __last) ...
【转】std::list中size()⽅法的时间复杂度 标准STL容器List(Linux GNU,sgi的实现),其size()函数的要遍历所有list中的元素来获得链表长度,来看看它的实现:1 size_type size() const { 2 size_type __result = 0;3 distance(begin(), end(), __result);4return __result;5 }...
可以看到,前一个循环居然比后一个多花了几乎 45 倍的时间...当我把循环次数从 10000 加到 100000 时程序半天没出结果... 由此有理由猜测 std::list 的 size() 方法难道是 O(N) 的?果然,在头文件中发现了这一段: size_type size() const { return std:: distance(begin(), end()); } 直接调用 ...
既存实现上无法使得此操作的时间复杂度低于 O(N) 。既然如此不如用 std::distance 更明显地表达复杂...
{ return std::distance(begin(), end()); } 直接调用 <algorithm> 算法库函数 distance() 计算元素个数……怪不得这么慢。然后又用 VS2008 (VC9.0)编译,结果如下: 30 num:50005000 60 奇怪的是前一个循环居然比后一个还快...不过至少知道 VS2008 (VC9.0)里的 size() 应该是 O(1) 的。同样查看...
{returnstd::distance(begin(), end());} 直接调用 <algorithm> 算法库函数 distance() 计算元素个数……怪不得这么慢。然后又用 VS2008 (VC9.0)编译,结果如下: 30 num:50005000 60 奇怪的是前一个循环居然比后一个还快...不过至少知道 VS2008 (VC9.0)里的 size() 应该是 O(1) 的。同样查看了一...
直接调用算法库函数 distance() 计算元素个数……怪不得这么慢。然后又用 VS2008 (VC9.0)编译,结果如下: 30 num:50005000 60 奇怪的是前一个循环居然比后一个还快...不过至少知道 VS2008 (VC9.0)里的 size() 应该是 O(1) 的。同样查看了一下代码,如下: ...
int>>Node;map<T,int>M;voidfix_size(node*it){int&it_size=static_cast<Node*>(it)->size;it...
一般用的都是快速排序,最好、正常和平均时间复杂度都为O(nlog2n),2为底的对数,最坏情况就是数据已经或者近乎有序,当然就是O(n^2)了