⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stl_algo.h

📁 本系统采用VC开发.可实现点云数据的处理,图像缩放,生成曲面.
💻 H
📖 第 1 页 / 共 5 页
字号:
                                        *(__last - 1), __comp)),       __comp);    __introsort_loop(__cut, __last, (_T*) 0, __depth_limit, __comp);    __last = __cut;  }}template <class _RandomAccessIter>inline void sort(_RandomAccessIter __first, _RandomAccessIter __last) {  if (__first != __last) {    __introsort_loop(__first, __last,                     __VALUE_TYPE(__first),                     __lg(__last - __first) * 2);    __final_insertion_sort(__first, __last);  }}template <class _RandomAccessIter, class _Compare>inline void sort(_RandomAccessIter __first, _RandomAccessIter __last,                 _Compare __comp) {  if (__first != __last) {    __introsort_loop(__first, __last,                     __VALUE_TYPE(__first),                     __lg(__last - __first) * 2,                     __comp);    __final_insertion_sort(__first, __last, __comp);  }}// stable_sort() and its auxiliary functions.template <class _RandomAccessIter>void __inplace_stable_sort(_RandomAccessIter __first,                           _RandomAccessIter __last) {  if (__last - __first < 15) {    __insertion_sort(__first, __last);    return;  }  _RandomAccessIter __middle = __first + (__last - __first) / 2;  __inplace_stable_sort(__first, __middle);  __inplace_stable_sort(__middle, __last);  __merge_without_buffer(__first, __middle, __last,                         __middle - __first,                         __last - __middle);}template <class _RandomAccessIter, class _Compare>void __inplace_stable_sort(_RandomAccessIter __first,                           _RandomAccessIter __last, _Compare __comp) {  if (__last - __first < 15) {    __insertion_sort(__first, __last, __comp);    return;  }  _RandomAccessIter __middle = __first + (__last - __first) / 2;  __inplace_stable_sort(__first, __middle, __comp);  __inplace_stable_sort(__middle, __last, __comp);  __merge_without_buffer(__first, __middle, __last,                         __middle - __first,                         __last - __middle,                         __comp);}template <class _RandomAccessIter1, class _RandomAccessIter2,          class _Distance>void __merge_sort_loop(_RandomAccessIter1 __first,                       _RandomAccessIter1 __last,                        _RandomAccessIter2 __result, _Distance __step_size) {  _Distance __two_step = 2 * __step_size;  while (__last - __first >= __two_step) {    __result = merge(__first, __first + __step_size,                     __first + __step_size, __first + __two_step,                     __result);    __first += __two_step;  }  __step_size = min(_Distance(__last - __first), __step_size);  merge(__first, __first + __step_size, __first + __step_size, __last,        __result);}template <class _RandomAccessIter1, class _RandomAccessIter2,          class _Distance, class _Compare>void __merge_sort_loop(_RandomAccessIter1 __first,                       _RandomAccessIter1 __last,                        _RandomAccessIter2 __result, _Distance __step_size,                       _Compare __comp) {  _Distance __two_step = 2 * __step_size;  while (__last - __first >= __two_step) {    __result = merge(__first, __first + __step_size,                     __first + __step_size, __first + __two_step,                     __result,                     __comp);    __first += __two_step;  }  __step_size = min(_Distance(__last - __first), __step_size);  merge(__first, __first + __step_size,        __first + __step_size, __last,        __result,        __comp);}const int __stl_chunk_size = 7;        template <class _RandomAccessIter, class _Distance>void __chunk_insertion_sort(_RandomAccessIter __first,                             _RandomAccessIter __last, _Distance __chunk_size){  while (__last - __first >= __chunk_size) {    __insertion_sort(__first, __first + __chunk_size);    __first += __chunk_size;  }  __insertion_sort(__first, __last);}template <class _RandomAccessIter, class _Distance, class _Compare>void __chunk_insertion_sort(_RandomAccessIter __first,                             _RandomAccessIter __last,                            _Distance __chunk_size, _Compare __comp){  while (__last - __first >= __chunk_size) {    __insertion_sort(__first, __first + __chunk_size, __comp);    __first += __chunk_size;  }  __insertion_sort(__first, __last, __comp);}template <class _RandomAccessIter, class _Pointer, class _Distance>void __merge_sort_with_buffer(_RandomAccessIter __first,                               _RandomAccessIter __last,                              _Pointer __buffer, _Distance*) {  _Distance __len = __last - __first;  _Pointer __buffer_last = __buffer + __len;  _Distance __step_size = __stl_chunk_size;  __chunk_insertion_sort(__first, __last, __step_size);  while (__step_size < __len) {    __merge_sort_loop(__first, __last, __buffer, __step_size);    __step_size *= 2;    __merge_sort_loop(__buffer, __buffer_last, __first, __step_size);    __step_size *= 2;  }}template <class _RandomAccessIter, class _Pointer, class _Distance,          class _Compare>void __merge_sort_with_buffer(_RandomAccessIter __first,                               _RandomAccessIter __last, _Pointer __buffer,                              _Distance*, _Compare __comp) {  _Distance __len = __last - __first;  _Pointer __buffer_last = __buffer + __len;  _Distance __step_size = __stl_chunk_size;  __chunk_insertion_sort(__first, __last, __step_size, __comp);  while (__step_size < __len) {    __merge_sort_loop(__first, __last, __buffer, __step_size, __comp);    __step_size *= 2;    __merge_sort_loop(__buffer, __buffer_last, __first, __step_size, __comp);    __step_size *= 2;  }}template <class _RandomAccessIter, class _Pointer, class _Distance>void __stable_sort_adaptive(_RandomAccessIter __first,                             _RandomAccessIter __last, _Pointer __buffer,                            _Distance __buffer_size) {  _Distance __len = (__last - __first + 1) / 2;  _RandomAccessIter __middle = __first + __len;  if (__len > __buffer_size) {    __stable_sort_adaptive(__first, __middle, __buffer, __buffer_size);    __stable_sort_adaptive(__middle, __last, __buffer, __buffer_size);  }  else {    __merge_sort_with_buffer(__first, __middle, __buffer, (_Distance*)0);    __merge_sort_with_buffer(__middle, __last, __buffer, (_Distance*)0);  }  __merge_adaptive(__first, __middle, __last, _Distance(__middle - __first),                    _Distance(__last - __middle), __buffer, __buffer_size);}template <class _RandomAccessIter, class _Pointer, class _Distance,           class _Compare>void __stable_sort_adaptive(_RandomAccessIter __first,                             _RandomAccessIter __last, _Pointer __buffer,                            _Distance __buffer_size, _Compare __comp) {  _Distance __len = (__last - __first + 1) / 2;  _RandomAccessIter __middle = __first + __len;  if (__len > __buffer_size) {    __stable_sort_adaptive(__first, __middle, __buffer, __buffer_size,                            __comp);    __stable_sort_adaptive(__middle, __last, __buffer, __buffer_size,                            __comp);  }  else {    __merge_sort_with_buffer(__first, __middle, __buffer, (_Distance*)0,                               __comp);    __merge_sort_with_buffer(__middle, __last, __buffer, (_Distance*)0,                               __comp);  }  __merge_adaptive(__first, __middle, __last, _Distance(__middle - __first),                    _Distance(__last - __middle), __buffer, __buffer_size,                   __comp);}template <class _RandomAccessIter, class _T, class _Distance>inline void __stable_sort_aux(_RandomAccessIter __first,                              _RandomAccessIter __last, _T*, _Distance*) {  _Temporary_buffer<_RandomAccessIter, _T> buf(__first, __last);  if (buf.begin() == 0)    __inplace_stable_sort(__first, __last);  else     __stable_sort_adaptive(__first, __last, buf.begin(),                           _Distance(buf.size()));}template <class _RandomAccessIter, class _T, class _Distance, class _Compare>inline void __stable_sort_aux(_RandomAccessIter __first,                              _RandomAccessIter __last, _T*, _Distance*,                              _Compare __comp) {  _Temporary_buffer<_RandomAccessIter, _T> buf(__first, __last);  if (buf.begin() == 0)    __inplace_stable_sort(__first, __last, __comp);  else     __stable_sort_adaptive(__first, __last, buf.begin(),                           _Distance(buf.size()),                           __comp);}template <class _RandomAccessIter>inline void stable_sort(_RandomAccessIter __first,                        _RandomAccessIter __last) {  __stable_sort_aux(__first, __last,                    __VALUE_TYPE(__first),                    __DISTANCE_TYPE(__first));}template <class _RandomAccessIter, class _Compare>inline void stable_sort(_RandomAccessIter __first,                        _RandomAccessIter __last, _Compare __comp) {  __stable_sort_aux(__first, __last,                    __VALUE_TYPE(__first),                    __DISTANCE_TYPE(__first),                     __comp);}// partial_sort, partial_sort_copy, and auxiliary functions.template <class _RandomAccessIter, class _T>void __partial_sort(_RandomAccessIter __first, _RandomAccessIter __middle,                    _RandomAccessIter __last, _T*) {  make_heap(__first, __middle);  for (_RandomAccessIter __i = __middle; __i < __last; ++__i)    if (*__i < *__first)       __pop_heap(__first, __middle, __i, _T(*__i),                 __DISTANCE_TYPE(__first));  sort_heap(__first, __middle);}template <class _RandomAccessIter>inline void partial_sort(_RandomAccessIter __first,                         _RandomAccessIter __middle,                         _RandomAccessIter __last) {  __partial_sort(__first, __middle, __last, __VALUE_TYPE(__first));}template <class _RandomAccessIter, class _T, class _Compare>void __partial_sort(_RandomAccessIter __first, _RandomAccessIter __middle,                    _RandomAccessIter __last, _T*, _Compare __comp) {  make_heap(__first, __middle, __comp);  for (_RandomAccessIter __i = __middle; __i < __last; ++__i)    if (__comp(*__i, *__first))      __pop_heap(__first, __middle, __i, _T(*__i), __comp,                 __DISTANCE_TYPE(__first));  sort_heap(__first, __middle, __comp);}template <class _RandomAccessIter, class _Compare>inline void partial_sort(_RandomAccessIter __first,                         _RandomAccessIter __middle,                         _RandomAccessIter __last, _Compare __comp) {  __partial_sort(__first, __middle, __last, __VALUE_TYPE(__first), __comp);}template <class _InputIter, class _RandomAccessIter, class _Distance,          class _T>_RandomAccessIter __partial_sort_copy(_InputIter __first,                                         _InputIter __last,                                         _RandomAccessIter __result_first,                                         _RandomAccessIter __result_last,                                          _Distance*, _T*) {  if (__result_first == __result_last) return __result_last;  _RandomAccessIter __result_real_last = __result_first;  while(__first != __last && __result_real_last != __result_last) {    *__result_real_last = *__first;    ++__result_real_last;    ++__first;  }  make_heap(__result_first, __result_real_last);  while (__first != __last) {    if (*__first < *__result_first)       __adjust_heap(__result_first, _Distance(0),                    _Distance(__result_real_last - __result_first),                    _T(*__first));    ++__first;  }  sort_heap(__result_first, __result_real_last);  return __result_real_last;}template <class _InputIter, class _RandomAccessIter>inline _RandomAccessIterpartial_sort_copy(_InputIter __first, _InputIter __last,                  _RandomAccessIter __result_first,                  _RandomAccessIter __result_last) {  return __partial_sort_copy(__first, __last, __result_first, __result_last,                              __DISTANCE_TYPE(__result_first),                             __VALUE_TYPE(__first));}template <class _InputIter, class _RandomAccessIter, class _Compare,          class _Distance, class _T>_RandomAccessIter __partial_sort_copy(_InputIter __first,                                         _InputIter __last,                                         _RandomAccessIter __result_first,                                         _RandomAccessIter __result_last,                                         _Compare __comp, _Distance*, _T*) {  if (__result_first == __result_last) return __result_last;  _RandomAccessIter __result_real_last = __result_first;  while(__first != __last && __result_real_last != __result_last) {    *__result_real_last = *__first;    ++__result_real_last;    ++__first;  }  make_heap(__result_first, __result_real_last, __comp);  while (__first != __last) {    if (__comp(*__first, *__result_first))      __adjust_heap(__result_first, _Distance(0),                    _Distance(__result_real_last - __result_first),                    _T(*__first),                    __comp);    ++__first;  }  sort_heap(__result_first, __result_real_last, __comp);  return __result_real_last;}template <class _InputIter, class _RandomAccessIter, class _Compare>inline _RandomAccessIterpartial_sort_copy(_InputIter __first, _InputIter __last,                  _RandomAccessIter __result_first,                  _RandomAccessIter __result_last, _Compare __comp) {  return __partial_sort_copy(__first, __last, __result_first, __result_last,                             __comp,                             __DISTANCE_TYPE(__result_first),                             __VALUE_TYPE(__first));}// nth_element() and its auxiliary functions.  template <class _RandomAccessIter, class _T>void __nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,                   _RandomAccessIter __last, _T*) {  while (__last - __first > 3) {    _RandomAccessIter __cut =      __unguarded_partition(__first, __last,                            _T(__median(*__first,                                        *(__first + (__last - __first)/2),                                        *(__last - 1))));    if (__cut <= __nth)      __first = __cut;    else       __last = __cut;  }  __insertion_sort(__first, __last);}template <class _RandomAccessIter>inline void nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,                        _RandomAccessIter __last) {  __nth_element(__first, __nth, __last, __VALUE_TYPE(__first));}template <class _RandomAccessIter, class _T, class _Compare>void __nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,                   _RandomAccessIter __last, _T*, _Compare __comp) {  while (__last - __first > 3) {    _RandomAccessIter __cut =      __unguarded_partition(__first, __last,                            _T(__median(*__first,                                        *(__first + (__last - __first)/2),                                         *(__last - 1),                                        __comp)),                            __comp);    if (__cut <= __nth)      __first = __cut;    else       __last = __cut;  }  __insertion_sort(__first, __last, __comp);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -