文件名称:
SGI-STL 源码以及 word 注解版
开发工具:
文件大小: 2mb
下载次数: 1
上传时间: 2009-10-04
详细说明: #include #ifndef _RWSTD_NO_NAMESPACE namespace std { #endif // // Forward declare raw_storage_iterator // template class raw_storage_iterator; // // Non-modifying sequence operations. // templ ate Function for_each (InputIterator first, InputIterator last, Function f) { while (first != last) f(*first++); return f; } template InputIterator find (InputIterator first, InputIterator last, const T& value) { while (first != last && *first != value) ++first; return first; } template InputIterator find_if (InputIterator first, InputIterator last, Predicate pred) { while (first != last && !pred(*first)) ++first; return first; } template ForwardIterator1 __find_end (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, Distance*) { Distance d, d2; __initialize(d,Distance(0)); __initialize(d2,Distance(0)); distance(first2,last2,d); if (!d) return first1; distance(first1,last1,d2); ForwardIterator1 save = last1; while (d2 >= d) { if (equal(first2,last2,first1)) save = first1; __initialize(d2,Distance(0)); distance(++first1,last1,d2); } return save; } template ForwardIterator1 find_end (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2) { return __find_end(first1,last1,first2,last2, __distance_type(first1)); } template ForwardIterator1 __find_end (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred, Distance*) { Distance d, d2; __initialize(d,Distance(0)); __initialize(d2,Distance(0)); distance(first2,last2,d); if (!d) return first1; distance(first1,last1,d2); ForwardIterator1 save = last1; while (d2 >= d) { if (equal(first2,last2,first1,pred)) save = first1; __initialize(d2,Distance(0)); distance(++first1,last1,d2); } return save; } template ForwardIterator1 find_end (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred) { return __find_end(first1,last1,first2,last2, pred,__distance_type(first1)); } template ForwardIterator1 find_first_of (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2) { if (first2 == last2) return first1; ForwardIterator1 next = first1; while (next != last1) { if (find(first2,last2,*next) != last2) return next; next++; } return last1; } template ForwardIterator1 find_first_of (ForwardIterator1 first1,ForwardIterator1 last1, ForwardIterator2 first2,ForwardIterator2 last2, BinaryPredicate pred) { if (first2 == last2) return first1; ForwardIterator1 next = first1; while (next != last1) { if (find_if(first2,last2,bind2nd(pred,*next)) != last2) return next; next++; } return last1; } template ForwardIterator adjacent_find (ForwardIterator first, ForwardIterator last) { if (first == last) return last; ForwardIterator next = first; while (++next != last) { if (*first == *next) return first; first = next; } return last; } template ForwardIterator adjacent_find (ForwardIterator first, ForwardIterator last, BinaryPredicate binary_pred) { if (first == last) return last; ForwardIterator next = first; while (++next != last) { if (binary_pred(*first, *next)) return first; first = next; } return last; } #ifndef _RWSTD_NO_CLASS_PARTIAL_SPEC template _TYPENAME iterator_traits::difference_type count (InputIterator first, InputIterator last, const T& value) { typename iterator_traits::difference_type n = 0; //RW_BUG: fix for bts-42842 while (first != last) if (*first++ == value) ++n; return n; } template _TYPENAME iterator_traits::difference_type count_if (InputIterator first, InputIterator last, Predicate pred) { typename iterator_traits::difference_type n = 0; //RW_BUG: fix for bts-42842 while (first != last) if (pred(*first++)) ++n; return n; } #endif /* _RWSTD_NO_CLASS_PARTIAL_SPEC */ #ifndef _RWSTD_NO_OLD_COUNT template void count (InputIterator first, InputIterator last, const T& value, Size& n) { while (first != last) if (*first++ == value) ++n; } template void count_if (InputIterator first, InputIterator last, Predicate pred, Size& n) { while (first != last) if (pred(*first++)) ++n; } #endif /* _RWSTD_NO_OLD_COUNT */ template pair mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2) { while (first1 != last1 && *first1 == *first2) { ++first1; ++first2; } pair tmp(first1, first2); return tmp; } template pair mismatch (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, BinaryPredicate binary_pred) { while (first1 != last1 && binary_pred(*first1, *first2)) { ++first1; ++first2; } pair tmp(first1, first2); return tmp; } template ForwardIterator1 __search (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, Distance1*, Distance2*) { Distance1 d1; __initialize(d1, Distance1(0)); distance(first1, last1, d1); Distance2 d2; __initialize(d2, Distance2(0)); distance(first2, last2, d2); if (d1 < d2) return last1; ForwardIterator1 current1 = first1; ForwardIterator2 current2 = first2; while (current2 != last2) { if (*current1++ != *current2++) if (d1-- == d2) return last1; else { current1 = ++first1; current2 = first2; } } return (current2 == last2) ? first1 : last1; } template ForwardIterator1 __search (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate binary_pred, Distance1*, Distance2*) { Distance1 d1; __initialize(d1, Distance1(0)); distance(first1, last1, d1); Distance2 d2; __initialize(d2, Distance2(0)); distance(first2, last2, d2); if (d1 < d2) return last1; ForwardIterator1 current1 = first1; ForwardIterator2 current2 = first2; while (current2 != last2) { if (!binary_pred(*current1++, *current2++)) if (d1-- == d2) return last1; else { current1 = ++first1; current2 = first2; } } return (current2 == last2) ? first1 : last1; } template ForwardIterator __search_n (ForwardIterator first, ForwardIterator last, Distance*, Size count, const T& value) { Distance d; __initialize(d, Distance(0)); distance(first, last, d); if (d < count || count <= 0) return last; Distance span = d - count; Size matches = 0; ForwardIterator current = first; while (current != last) { if (*current++ != value) { if (span < matches + 1) return last; span -= matches + 1; matches = 0; first = current; } else if (++matches == count) return first; } return last; } template ForwardIterator __search_n (ForwardIterator first, ForwardIterator last, Distance*, Size count, const T& value, BinaryPredicate pred) { Distance d; __initialize(d, Distance(0)); distance(first, last, d); if (d < count || count <= 0) return last; Distance span = d - count; Size matches = 0; ForwardIterator current = first; while (current != last) { if (!pred(*current++, value)) { if (span < matches + 1) return last; span -= matches + 1; matches = 0; first = current; } else if (++matches == count) return first; } return last; } // // Modifying sequence operations. // template OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result) { while (first != last) *result++ = *first++; return result; } template BidirectionalIterator2 copy_backward (BidirectionalIterator1 first, BidirectionalIterator1 last, BidirectionalIterator2 result) { while (first != last) *--result = *--last; return result; } template ForwardIterator2 swap_ranges (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2) { while (first1 != last1) iter_swap(first1++, first2++); return first2; } template OutputIterator transform (InputIterator first, InputIterator last, OutputIterator result, UnaryOperation op) { while (first != last) *result++ = op(*first++); return result; } template OutputIterator transform (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, OutputIterator result, BinaryOperation binary_op) { while (first1 != last1) *result++ = binary_op(*first1++, *first2++); return result; } template void replace (ForwardIterator first, ForwardIterator last, const T& old_value, const T& new_value) { while (first != last) { if (*first == old_value) *first = new_value; ++first; } } template void replace_if (ForwardIterator first, ForwardIterator last, Predicate pred, const T& new_value) { while (first != last) { if (pred(*first)) *first = new_value; ++first; } } template OutputIterator replace_copy (InputIterator first, InputIterator last, OutputIterator result, const T& old_value, const T& new_value) { while (first != last) { *result++ = *first == old_value ? new_value : *first; ++first; } return result; } template OutputIterator replace_copy_if (Iterator first, Iterator last, OutputIterator result, Predicate pred, const T& new_value) { while (first != last) { if(pred(*first)) *result++ = new_value; else *result++ = *first; ++first; } return result; } ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.