?? algorithm
字號:
template<class _FwdIt1,
class _FwdIt2> inline
_FwdIt1 find_first_of(_FwdIt1 _First1, _FwdIt1 _Last1,
_FwdIt2 _First2, _FwdIt2 _Last2)
{ // look for one of [_First2, _Last2) that matches element
_DEBUG_RANGE(_First1, _Last1);
_DEBUG_RANGE(_First2, _Last2);
return (_Rechecked(_First1,
_Find_first_of(_Unchecked(_First1), _Unchecked(_Last1),
_Unchecked(_First2), _Unchecked(_Last2))));
}
// TEMPLATE FUNCTION find_first_of WITH PRED
template<class _FwdIt1,
class _FwdIt2,
class _Pr> inline
_FwdIt1 _Find_first_of(_FwdIt1 _First1, _FwdIt1 _Last1,
_FwdIt2 _First2, _FwdIt2 _Last2, _Pr _Pred)
{ // look for one of [_First2, _Last2) satisfying _Pred with element
for (; _First1 != _Last1; ++_First1)
for (_FwdIt2 _Mid2 = _First2; _Mid2 != _Last2; ++_Mid2)
if (_Pred(*_First1, *_Mid2))
return (_First1);
return (_First1);
}
template<class _FwdIt1,
class _FwdIt2,
class _Pr> inline
_FwdIt1 find_first_of(_FwdIt1 _First1, _FwdIt1 _Last1,
_FwdIt2 _First2, _FwdIt2 _Last2, _Pr _Pred)
{ // look for one of [_First2, _Last2) satisfying _Pred with element
_DEBUG_RANGE(_First1, _Last1);
_DEBUG_RANGE(_First2, _Last2);
_DEBUG_POINTER(_Pred);
return (_Rechecked(_First1,
_Find_first_of(_Unchecked(_First1), _Unchecked(_Last1),
_Unchecked(_First2), _Unchecked(_Last2), _Pred)));
}
// TEMPLATE FUNCTION swap_ranges
template<class _FwdIt1,
class _FwdIt2> inline
_FwdIt2 _Swap_ranges(_FwdIt1 _First1, _FwdIt1 _Last1,
_FwdIt2 _Dest)
{ // swap [_First1, _Last1) with [_Dest, ...)
for (; _First1 != _Last1; ++_First1, ++_Dest)
_STD iter_swap(_First1, _Dest);
return (_Dest);
}
#if _ITERATOR_DEBUG_LEVEL == 0
template<class _FwdIt1,
class _FwdIt2> inline
_FwdIt2 swap_ranges(_FwdIt1 _First1, _FwdIt1 _Last1,
_FwdIt2 _Dest)
{ // swap [_First1, _Last1) with [_Dest, ...)
return (_Swap_ranges(_Unchecked(_First1), _Unchecked(_Last1),
_Dest));
}
#else /* _ITERATOR_DEBUG_LEVEL == 0 */
template<class _FwdIt1,
class _FwdIt2> inline
_FwdIt2 _Swap_ranges(_FwdIt1 _First1, _FwdIt1 _Last1,
_FwdIt2 _Dest,
forward_iterator_tag, forward_iterator_tag)
{ // swap [_First1, _Last1) with [_Dest, ...), arbitrary iterators
return (_Swap_ranges(_First1, _Last1,
_Dest));
}
template<class _FwdIt1,
class _FwdIt2> inline
_FwdIt2 _Swap_ranges(_FwdIt1 _First1, _FwdIt1 _Last1,
_FwdIt2 _Dest,
random_access_iterator_tag, random_access_iterator_tag)
{ // swap [_First1, _Last1) with [_Dest, ...), random-access iterators
_FwdIt2 _Ans = _Dest + (_Last1 - _First1); // also checks range
_Swap_ranges(_First1, _Last1,
_Unchecked(_Dest));
return (_Ans);
}
template<class _FwdIt1,
class _FwdIt2> inline
_FwdIt2 _Swap_ranges(_FwdIt1 _First1, _FwdIt1 _Last1,
_FwdIt2 _Dest, _STD tr1::true_type)
{ // swap [_First1, _Last1) with [_Dest, ...), checked dest
return (_Swap_ranges(_First1, _Last1,
_Dest, _Iter_cat(_First1), _Iter_cat(_Dest)));
}
template<class _FwdIt1,
class _FwdIt2> inline
_SCL_INSECURE_DEPRECATE
_FwdIt2 _Swap_ranges(_FwdIt1 _First1, _FwdIt1 _Last1,
_FwdIt2 _Dest, _STD tr1::false_type)
{ // swap [_First1, _Last1) with [_Dest, ...), unchecked dest
return (_Swap_ranges(_First1, _Last1,
_Dest, _Iter_cat(_First1), _Iter_cat(_Dest)));
}
template<class _FwdIt1,
class _FwdIt2> inline
_FwdIt2 swap_ranges(_FwdIt1 _First1, _FwdIt1 _Last1,
_FwdIt2 _Dest)
{ // swap [_First1, _Last1) with [_Dest, ...)
_DEBUG_RANGE(_First1, _Last1);
_DEBUG_POINTER(_Dest);
return (_STD _Swap_ranges(_Unchecked(_First1), _Unchecked(_Last1),
_Dest, _Is_checked(_Dest)));
}
template<class _FwdIt1,
class _OutTy,
size_t _OutSize> inline
_OutTy *swap_ranges(_FwdIt1 _First1, _FwdIt1 _Last1,
_OutTy (&_Dest)[_OutSize])
{ // swap [_First1, _Last1) with [_Dest, ...), array dest
return (_Unchecked(
_STD swap_ranges(_First1, _Last1,
_Array_iterator<_OutTy, _OutSize>(_Dest))));
}
#endif /* _ITERATOR_DEBUG_LEVEL == 0 */
// TEMPLATE FUNCTION swap
template<class _Ty,
size_t _Size> inline
void swap(_Ty (&_Left)[_Size], _Ty (&_Right)[_Size])
{ // exchange arrays stored at _Left and _Right
if (&_Left != &_Right)
_Swap_ranges(&_Left[0], &_Left[0] + _Size, &_Right[0]);
}
// TEMPLATE FUNCTION transform WITH UNARY OP
template<class _InIt,
class _OutIt,
class _Fn1> inline
_OutIt _Transform(_InIt _First, _InIt _Last,
_OutIt _Dest, _Fn1 _Func)
{ // transform [_First, _Last) with _Func
for (; _First != _Last; ++_First, ++_Dest)
*_Dest = _Func(*_First);
return (_Dest);
}
#if _ITERATOR_DEBUG_LEVEL == 0
template<class _InIt,
class _OutIt,
class _Fn1> inline
_OutIt transform(_InIt _First, _InIt _Last,
_OutIt _Dest, _Fn1 _Func)
{ // transform [_First, _Last) with _Func
if (_First != _Last)
return (_Transform(_Unchecked(_First), _Unchecked(_Last),
_Dest, _Func));
return (_Dest);
}
#else /* _ITERATOR_DEBUG_LEVEL == 0 */
template<class _InIt,
class _OutIt,
class _Fn1> inline
_OutIt _Transform1(_InIt _First, _InIt _Last,
_OutIt _Dest, _Fn1 _Func,
input_iterator_tag, output_iterator_tag)
{ // transform [_First, _Last) with _Func, arbitrary iterators
return (_Transform(_First, _Last,
_Dest, _Func));
}
template<class _InIt,
class _OutIt,
class _Fn1> inline
_OutIt _Transform1(_InIt _First, _InIt _Last,
_OutIt _Dest, _Fn1 _Func,
random_access_iterator_tag, random_access_iterator_tag)
{ // transform [_First, _Last) with _Func, random-access iterators
_OutIt _Ans = _Dest + (_Last - _First); // also checks range
_Transform(_First, _Last,
_Unchecked(_Dest), _Func);
return (_Ans);
}
template<class _InIt,
class _OutIt,
class _Fn1> inline
_OutIt _Transform1(_InIt _First, _InIt _Last,
_OutIt _Dest, _Fn1 _Func, _STD tr1::true_type)
{ // transform [_First, _Last) with _Func, checked dest
return (_Transform1(_First, _Last,
_Dest, _Func,
_Iter_cat(_First), _Iter_cat(_Dest)));
}
template<class _InIt,
class _OutIt,
class _Fn1> inline
_SCL_INSECURE_DEPRECATE
_OutIt _Transform1(_InIt _First, _InIt _Last,
_OutIt _Dest, _Fn1 _Func, _STD tr1::false_type)
{ // transform [_First, _Last) with _Func, unchecked dest
return (_Transform1(_First, _Last,
_Dest, _Func,
_Iter_cat(_First), _Iter_cat(_Dest)));
}
template<class _InIt,
class _OutIt,
class _Fn1> inline
_OutIt transform(_InIt _First, _InIt _Last,
_OutIt _Dest, _Fn1 _Func)
{ // transform [_First, _Last) with _Func
_DEBUG_RANGE(_First, _Last);
_DEBUG_POINTER(_Dest);
_DEBUG_POINTER(_Func);
if (_First != _Last)
return (_Transform1(_Unchecked(_First), _Unchecked(_Last),
_Dest, _Func, _Is_checked(_Dest)));
return (_Dest);
}
template<class _InIt,
class _OutTy,
size_t _OutSize,
class _Fn1> inline
_OutTy *transform(_InIt _First, _InIt _Last,
_OutTy (&_Dest)[_OutSize], _Fn1 _Func)
{ // transform [_First, _Last) with _Func, array dest
return (_Unchecked(
_STD transform(_First, _Last,
_Array_iterator<_OutTy, _OutSize>(_Dest), _Func)));
}
#endif /* _ITERATOR_DEBUG_LEVEL == 0 */
// TEMPLATE FUNCTION transform WITH BINARY OP
template<class _InIt1,
class _InIt2,
class _OutIt,
class _Fn2> inline
_OutIt _Transform(_InIt1 _First1, _InIt1 _Last1,
_InIt2 _First2, _OutIt _Dest, _Fn2 _Func)
{ // transform [_First1, _Last1) and [_First2, ...) with _Func
for (; _First1 != _Last1; ++_First1, ++_First2, ++_Dest)
*_Dest = _Func(*_First1, *_First2);
return (_Dest);
}
#if _ITERATOR_DEBUG_LEVEL == 0
template<class _InIt1,
class _InIt2,
class _OutIt,
class _Fn2> inline
_OutIt transform(_InIt1 _First1, _InIt1 _Last1,
_InIt2 _First2, _OutIt _Dest, _Fn2 _Func)
{ // transform [_First1, _Last1) and [_First2, ...) with _Func
if (_First1 != _Last1)
return (_Transform(_Unchecked(_First1), _Unchecked(_Last1),
_First2, _Dest, _Func));
return (_Dest);
}
#else /* _ITERATOR_DEBUG_LEVEL == 0 */
template<class _InIt1,
class _InIt2,
class _OutIt,
class _Fn2> inline
_OutIt _Transform3(_InIt1 _First1, _InIt1 _Last1,
_InIt2 _First2, _OutIt _Dest, _Fn2 _Func,
input_iterator_tag, output_iterator_tag)
{ // transform [_First1, _Last1) and [_First2, ...), arbitrary dest
return (_Transform(_First1, _Last1,
_First2, _Dest, _Func));
}
template<class _InIt1,
class _InIt2,
class _OutIt,
class _Fn2> inline
_OutIt _Transform3(_InIt1 _First1, _InIt1 _Last1,
_InIt2 _First2, _OutIt _Dest, _Fn2 _Func,
random_access_iterator_tag, random_access_iterator_tag)
{ // transform [_First1, _Last1) and [_First2, ...), random-access dest
_OutIt _Ans = _Dest + (_Last1 - _First1); // also checks range
_Transform(_First1, _Last1,
_First2, _Unchecked(_Dest), _Func);
return (_Ans);
}
template<class _InIt1,
class _InIt2,
class _OutIt,
class _Fn2> inline
_OutIt _Transform2(_InIt1 _First1, _InIt1 _Last1,
_InIt2 _First2, _OutIt _Dest, _Fn2 _Func,
input_iterator_tag, input_iterator_tag)
{ // transform [_First1, _Last1) and [_First2, ...), arbitrary input
return (_Transform3(_First1, _Last1,
_First2, _Dest, _Func,
_Iter_cat(_First1), _Iter_cat(_Dest)));
}
template<class _InIt1,
class _InIt2,
class _OutIt,
class _Fn2> inline
_OutIt _Transform2(_InIt1 _First1, _InIt1 _Last1,
_InIt2 _First2, _OutIt _Dest, _Fn2 _Func,
random_access_iterator_tag, random_access_iterator_tag)
{ // transform [_First1, _Last1) and [_First2, ...), random-access input
_InIt2 _Last2 = _First2 + (_Last1 - _First1); // also checks range
_Last2 = _Last2; // to quiet diagnostics
return (_Transform3(_First1, _Last1,
_Unchecked(_First2), _Dest, _Func,
_Iter_cat(_First1), _Iter_cat(_Dest)));
}
template<class _InIt1,
class _InIt2,
class _OutIt,
class _Fn2> inline
_OutIt _Transform2(_InIt1 _First1, _InIt1 _Last1,
_InIt2 _First2, _OutIt _Dest, _Fn2 _Func,
_STD tr1::true_type)
{ // transform [_First1, _Last1) and [_First2, ...), checked dest
return (_Transform2(_First1, _Last1,
_First2, _Dest, _Func,
_Iter_cat(_First1), _Iter_cat(_First2)));
}
template<class _InIt1,
class _InIt2,
class _OutIt,
class _Fn2> inline
_SCL_INSECURE_DEPRECATE
_OutIt _Transform2(_InIt1 _First1, _InIt1 _Last1,
_InIt2 _First2, _OutIt _Dest, _Fn2 _Func, _STD tr1::false_type)
{ // transform [_First1, _Last1) and [_First2, ...), unchecked dest
return (_Transform2(_First1, _Last1,
_First2, _Dest, _Func,
_Iter_cat(_First1), _Iter_cat(_First2)));
}
template<class _InIt1,
class _InIt2,
class _OutIt,
class _Fn2> inline
_OutIt transform(_InIt1 _First1, _InIt1 _Last1,
_InIt2 _First2, _OutIt _Dest, _Fn2 _Func)
{ // transform [_First1, _Last1) and [_First2, ...) with _Func
_DEBUG_RANGE(_First1, _Last1);
_DEBUG_POINTER(_Dest);
_DEBUG_POINTER(_Func);
if (_First1 != _Last1)
return (_Transform2(_Unchecked(_First1), _Unchecked(_Last1),
_First2, _Dest, _Func,
_Is_checked(_Dest)));
return (_Dest);
}
template<class _InIt1,
class _InTy,
size_t _InSize,
class _OutIt,
class _Fn2> inline
_OutIt transform(_InIt1 _First1, _InIt1 _Last1,
_InTy (&_First2)[_InSize], _OutIt _Dest, _Fn2 _Func)
{ // transform [_First1, _Last1) and [_First2, ...), array input
return (_STD transform(_First1, _Last1,
_Array_iterator<_InTy, _InSize>(_First2), _Dest, _Func));
}
template<class _InIt1,
class _InIt2,
class _OutTy,
size_t _OutSize,
class _Fn2> inline
_OutTy *transform(_InIt1 _First1, _InIt1 _Last1,
_InIt2 _First2, _OutTy (&_Dest)[_OutSize], _Fn2 _Func)
{ // transform [_First1, _Last1) and [_First2, ...), array dest
return (_Unchecked(
_STD transform(_First1, _Last1,
_First2, _Array_iterator<_OutTy, _OutSize>(_Dest), _Func)));
}
template<class _InIt1,
class _InTy,
size_t _InSize,
class _OutTy,
size_t _OutSize,
class _Fn2> inline
_OutTy *transform(_InIt1 _First1, _InIt1 _Last1,
_InTy (&_First2)[_InSize], _OutTy (&_Dest)[_OutSize], _Fn2 _Func)
{ // transform [_First1, _Last1) and [_First2, ...), array input/dest
return (_Unchecked(
_STD transform(_First1, _Last1,
_Array_iterator<_InTy, _InSize>(_First2),
_Array_iterator<_OutTy, _OutSize>(_Dest), _Func)));
}
#endif /* _ITERATOR_DEBUG_LEVEL == 0 */
// TEMPLATE FUNCTION replace
template<class _FwdIt,
class _Ty> inline
void _Replace(_FwdIt _First, _FwdIt _Last,
const _Ty& _Oldval, const _Ty& _Newval)
{ // replace each matching _Oldval with _Newval
for (; _First != _Last; ++_First)
if (*_First == _Oldval)
*_First = _Newval;
}
template<class _FwdIt,
class _Ty> inline
void replace(_FwdIt _First, _FwdIt _Last,
const _Ty& _Oldval, const _Ty& _Newval)
{ // replace each matching _Oldval with _Newval
_DEBUG_RANGE(_First, _Last);
_Replace(_Unchecked(_First), _Unchecked(_Last),
_Oldval, _Newval);
}
// TEMPLATE FUNCTION replace_if
template<class _FwdIt,
class _Pr,
class _Ty> inline
void _Replace_if(_FwdIt _First, _FwdIt _Last, _Pr _Pred, const _Ty& _Val)
{ // replace each satisfying _Pred with _Val
for (; _First != _Last; ++_First)
if (_Pred(*_First))
*_First = _Val;
}
template<class _FwdIt,
class _Pr,
class _Ty> inline
void replace_if(_FwdIt _First, _FwdIt _Last, _Pr _Pred, const _Ty& _Val)
{ // replace each satisfying _Pred with _Val
_DEBUG_RANGE(_First, _Last);
_DEBUG_POINTER(_Pred);
_Replace_if(_Unchecked(_First), _Unchecked(_Last),
_Pred, _Val);
}
// TEMPLATE FUNCTION replace_copy
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -