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

📄 stl_algo.h

📁 本系统采用VC开发.可实现点云数据的处理,图像缩放,生成曲面.
💻 H
📖 第 1 页 / 共 5 页
字号:
}template <class _RandomAccessIter, class _Compare>inline void nth_element(_RandomAccessIter __first, _RandomAccessIter __nth,                 _RandomAccessIter __last, _Compare __comp) {  __nth_element(__first, __nth, __last, __VALUE_TYPE(__first), __comp);}// Binary search (lower_bound, upper_bound, equal_range, binary_search).template <class _ForwardIter, class _T, class _Distance>_ForwardIter __lower_bound(_ForwardIter __first, _ForwardIter __last,                           const _T& __val, _Distance*) {  _Distance __len = 0;  distance(__first, __last, __len);  _Distance __half;  _ForwardIter __middle;  while (__len > 0) {    __half = __len >> 1;    __middle = __first;    advance(__middle, __half);    if (*__middle < __val) {      __first = __middle;      ++__first;      __len = __len - __half - 1;    }    else      __len = __half;  }  return __first;}template <class _ForwardIter, class _T>inline _ForwardIter lower_bound(_ForwardIter __first, _ForwardIter __last,                                   const _T& __val) {  return __lower_bound(__first, __last, __val,                       __DISTANCE_TYPE(__first));}template <class _ForwardIter, class _T, class _Compare, class _Distance>_ForwardIter __lower_bound(_ForwardIter __first, _ForwardIter __last,                              const _T& __val, _Compare __comp, _Distance*){  _Distance __len = 0;  distance(__first, __last, __len);  _Distance __half;  _ForwardIter __middle;  while (__len > 0) {    __half = __len >> 1;    __middle = __first;    advance(__middle, __half);    if (__comp(*__middle, __val)) {      __first = __middle;      ++__first;      __len = __len - __half - 1;    }    else      __len = __half;  }  return __first;}template <class _ForwardIter, class _T, class _Compare>inline _ForwardIter lower_bound(_ForwardIter __first, _ForwardIter __last,                                const _T& __val, _Compare __comp) {  return __lower_bound(__first, __last, __val, __comp,                       __DISTANCE_TYPE(__first));}template <class _ForwardIter, class _T, class _Distance>_ForwardIter __upper_bound(_ForwardIter __first, _ForwardIter __last,                           const _T& __val, _Distance*){  _Distance __len = 0;  distance(__first, __last, __len);  _Distance __half;  _ForwardIter __middle;  while (__len > 0) {    __half = __len >> 1;    __middle = __first;    advance(__middle, __half);    if (__val < *__middle)      __len = __half;    else {      __first = __middle;      ++__first;      __len = __len - __half - 1;    }  }  return __first;}template <class _ForwardIter, class _T>inline _ForwardIter upper_bound(_ForwardIter __first, _ForwardIter __last,                                const _T& __val) {  return __upper_bound(__first, __last, __val,                       __DISTANCE_TYPE(__first));}template <class _ForwardIter, class _T, class _Compare, class _Distance>_ForwardIter __upper_bound(_ForwardIter __first, _ForwardIter __last,                           const _T& __val, _Compare __comp, _Distance*){  _Distance __len = 0;  distance(__first, __last, __len);  _Distance __half;  _ForwardIter __middle;  while (__len > 0) {    __half = __len >> 1;    __middle = __first;    advance(__middle, __half);    if (__comp(__val, *__middle))      __len = __half;    else {      __first = __middle;      ++__first;      __len = __len - __half - 1;    }  }  return __first;}template <class _ForwardIter, class _T, class _Compare>inline _ForwardIter upper_bound(_ForwardIter __first, _ForwardIter __last,                                const _T& __val, _Compare __comp) {  return __upper_bound(__first, __last, __val, __comp,                       __DISTANCE_TYPE(__first));}template <class _ForwardIter, class _T, class _Distance>pair<_ForwardIter, _ForwardIter>__equal_range(_ForwardIter __first, _ForwardIter __last, const _T& __val,              _Distance*){  _Distance __len = 0;  distance(__first, __last, __len);  _Distance __half;  _ForwardIter __middle, __left, __right;  while (__len > 0) {    __half = __len >> 1;    __middle = __first;    advance(__middle, __half);    if (*__middle < __val) {      __first = __middle;      ++__first;      __len = __len - __half - 1;    }    else if (__val < *__middle)      __len = __half;    else {      __left = lower_bound(__first, __middle, __val);      advance(__first, __len);      __right = upper_bound(++__middle, __first, __val);      return pair<_ForwardIter, _ForwardIter>(__left, __right);    }  }  return pair<_ForwardIter, _ForwardIter>(__first, __first);}template <class _ForwardIter, class _T>inline pair<_ForwardIter, _ForwardIter>equal_range(_ForwardIter __first, _ForwardIter __last, const _T& __val) {  return __equal_range(__first, __last, __val,                       __DISTANCE_TYPE(__first));}template <class _ForwardIter, class _T, class _Compare, class _Distance>pair<_ForwardIter, _ForwardIter>__equal_range(_ForwardIter __first, _ForwardIter __last, const _T& __val,              _Compare __comp, _Distance*){  _Distance __len = 0;  distance(__first, __last, __len);  _Distance __half;  _ForwardIter __middle, __left, __right;  while (__len > 0) {    __half = __len >> 1;    __middle = __first;    advance(__middle, __half);    if (__comp(*__middle, __val)) {      __first = __middle;      ++__first;      __len = __len - __half - 1;    }    else if (__comp(__val, *__middle))      __len = __half;    else {      __left = lower_bound(__first, __middle, __val, __comp);      advance(__first, __len);      __right = upper_bound(++__middle, __first, __val, __comp);      return pair<_ForwardIter, _ForwardIter>(__left, __right);    }  }  return pair<_ForwardIter, _ForwardIter>(__first, __first);}           template <class _ForwardIter, class _T, class _Compare>inline pair<_ForwardIter, _ForwardIter>equal_range(_ForwardIter __first, _ForwardIter __last, const _T& __val,            _Compare __comp) {  return __equal_range(__first, __last, __val, __comp,                       __DISTANCE_TYPE(__first));} template <class _ForwardIter, class _T>bool binary_search(_ForwardIter __first, _ForwardIter __last,                   const _T& __val) {  _ForwardIter __i = lower_bound(__first, __last, __val);  return __i != __last && !(__val < *__i);}template <class _ForwardIter, class _T, class _Compare>bool binary_search(_ForwardIter __first, _ForwardIter __last, const _T& __val,                   _Compare __comp) {  _ForwardIter __i = lower_bound(__first, __last, __val, __comp);  return __i != __last && !__comp(__val, *__i);}// merge, with and without an explicitly supplied comparison function.template <class _InputIter1, class _InputIter2, class _OutputIter>_OutputIter merge(_InputIter1 __first1, _InputIter1 __last1,                  _InputIter2 __first2, _InputIter2 __last2,                  _OutputIter __result) {  while (__first1 != __last1 && __first2 != __last2) {    if (*__first2 < *__first1) {      *__result = *__first2;      ++__first2;    }    else {      *__result = *__first1;      ++__first1;    }    ++__result;  }  return copy(__first2, __last2, copy(__first1, __last1, __result));}template <class _InputIter1, class _InputIter2, class _OutputIter,          class _Compare>_OutputIter merge(_InputIter1 __first1, _InputIter1 __last1,                  _InputIter2 __first2, _InputIter2 __last2,                  _OutputIter __result, _Compare __comp) {  while (__first1 != __last1 && __first2 != __last2) {    if (__comp(*__first2, *__first1)) {      *__result = *__first2;      ++__first2;    }    else {      *__result = *__first1;      ++__first1;    }    ++__result;  }  return copy(__first2, __last2, copy(__first1, __last1, __result));}// inplace_merge and its auxiliary functions. template <class _BidirectionalIter, class _Distance>void __merge_without_buffer(_BidirectionalIter __first,                            _BidirectionalIter __middle,                            _BidirectionalIter __last,                            _Distance __len1, _Distance __len2) {  if (__len1 == 0 || __len2 == 0)    return;  if (__len1 + __len2 == 2) {    if (*__middle < *__first)      iter_swap(__first, __middle);    return;  }  _BidirectionalIter __first_cut = __first;  _BidirectionalIter __second_cut = __middle;  _Distance __len11 = 0;  _Distance __len22 = 0;  if (__len1 > __len2) {    __len11 = __len1 / 2;    advance(__first_cut, __len11);    __second_cut = lower_bound(__middle, __last, *__first_cut);    distance(__middle, __second_cut, __len22);  }  else {    __len22 = __len2 / 2;    advance(__second_cut, __len22);    __first_cut = upper_bound(__first, __middle, *__second_cut);    distance(__first, __first_cut, __len11);  }  _BidirectionalIter __new_middle    = rotate(__first_cut, __middle, __second_cut);  __merge_without_buffer(__first, __first_cut, __new_middle,                         __len11, __len22);  __merge_without_buffer(__new_middle, __second_cut, __last, __len1 - __len11,                         __len2 - __len22);}template <class _BidirectionalIter, class _Distance, class _Compare>void __merge_without_buffer(_BidirectionalIter __first,                            _BidirectionalIter __middle,                            _BidirectionalIter __last,                            _Distance __len1, _Distance __len2,                            _Compare __comp) {  if (__len1 == 0 || __len2 == 0)    return;  if (__len1 + __len2 == 2) {    if (__comp(*__middle, *__first))      iter_swap(__first, __middle);    return;  }  _BidirectionalIter __first_cut = __first;  _BidirectionalIter __second_cut = __middle;  _Distance __len11 = 0;  _Distance __len22 = 0;  if (__len1 > __len2) {    __len11 = __len1 / 2;    advance(__first_cut, __len11);    __second_cut = lower_bound(__middle, __last, *__first_cut, __comp);    distance(__middle, __second_cut, __len22);  }  else {    __len22 = __len2 / 2;    advance(__second_cut, __len22);    __first_cut = upper_bound(__first, __middle, *__second_cut, __comp);    distance(__first, __first_cut, __len11);  }  _BidirectionalIter __new_middle    = rotate(__first_cut, __middle, __second_cut);  __merge_without_buffer(__first, __first_cut, __new_middle, __len11, __len22,                         __comp);  __merge_without_buffer(__new_middle, __second_cut, __last, __len1 - __len11,                         __len2 - __len22, __comp);}template <class _BidirectionalIter1, class _BidirectionalIter2,          class _Distance>_BidirectionalIter1 __rotate_adaptive(_BidirectionalIter1 __first,                                      _BidirectionalIter1 __middle,                                      _BidirectionalIter1 __last,                                      _Distance __len1, _Distance __len2,                                      _BidirectionalIter2 __buffer,                                      _Distance __buffer_size) {  _BidirectionalIter2 __buffer_end;  if (__len1 > __len2 && __len2 <= __buffer_size) {    __buffer_end = copy(__middle, __last, __buffer);    copy_backward(__first, __middle, __last);    return copy(__buffer, __buffer_end, __first);  }  else if (__len1 <= __buffer_size) {    __buffer_end = copy(__first, __middle, __buffer);    copy(__middle, __last, __first);    return copy_backward(__buffer, __buffer_end, __last);  }  else    return rotate(__first, __middle, __last);}template <class _BidirectionalIter1, class _BidirectionalIter2,          class _BidirectionalIter3>_BidirectionalIter3 __merge_backward(_BidirectionalIter1 __first1,                                     _BidirectionalIter1 __last1,                                     _BidirectionalIter2 __first2,                                     _BidirectionalIter2 __last2,                                     _BidirectionalIter3 __result) {  if (__first1 == __last1)    return copy_backward(__first2, __last2, __result);  if (__first2 == __last2)    return copy_backward(__first1, __last1, __result);  --__last1;  --__last2;  while (true) {    if (*__last2 < *__last1) {      *--__result = *__last1;      if (__first1 == __last1)        return copy_backward(__first2, ++__last2, __result);      --__last1;    }    else {      *--__result = *__last2;      if (__first2 == __last2)        return copy_backward(__first1, ++__last1, __result);      --__last2;    }  }}template <class _BidirectionalIter1, class _BidirectionalIter2,          class _BidirectionalIter3, class _Compare>_BidirectionalIter3 __merge_backward(_BidirectionalIter1 __first1,                                     _BidirectionalIter1 __last1,                                     _BidirectionalIter2 __first2,                                     _BidirectionalIter2 __last2,             

⌨️ 快捷键说明

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