?? algorithm
字號:
template<class _InIt,
class _OutIt,
class _Ty> inline
_OutIt _Replace_copy(_InIt _First, _InIt _Last,
_OutIt _Dest, const _Ty& _Oldval, const _Ty& _Newval)
{ // copy replacing each matching _Oldval with _Newval
for (; _First != _Last; ++_First, ++_Dest)
*_Dest = *_First == _Oldval ? _Newval : *_First;
return (_Dest);
}
#if _ITERATOR_DEBUG_LEVEL == 0
template<class _InIt,
class _OutIt,
class _Ty> inline
_OutIt replace_copy(_InIt _First, _InIt _Last,
_OutIt _Dest, const _Ty& _Oldval, const _Ty& _Newval)
{ // copy replacing each matching _Oldval with _Newval
return (_Replace_copy(_Unchecked(_First), _Unchecked(_Last),
_Dest, _Oldval, _Newval));
}
#else /* _ITERATOR_DEBUG_LEVEL == 0 */
template<class _InIt,
class _OutIt,
class _Ty> inline
_OutIt _Replace_copy(_InIt _First, _InIt _Last,
_OutIt _Dest, const _Ty& _Oldval, const _Ty& _Newval,
input_iterator_tag, output_iterator_tag)
{ // copy replacing each matching _Oldval, arbitrary iterators
return (_Replace_copy(_Unchecked(_First), _Unchecked(_Last),
_Dest, _Oldval, _Newval));
}
template<class _InIt,
class _OutIt,
class _Ty> inline
_OutIt _Replace_copy(_InIt _First, _InIt _Last,
_OutIt _Dest, const _Ty& _Oldval, const _Ty& _Newval,
random_access_iterator_tag, random_access_iterator_tag)
{ // copy replacing each matching _Oldval, random-access iterators
_OutIt _Ans = _Dest + (_Last - _First); // also checks range
_Replace_copy(_First, _Last,
_Unchecked(_Dest), _Oldval, _Newval);
return (_Ans);
}
template<class _InIt,
class _OutIt,
class _Ty> inline
_OutIt _Replace_copy(_InIt _First, _InIt _Last,
_OutIt _Dest, const _Ty& _Oldval, const _Ty& _Newval,
_STD tr1::true_type)
{ // copy replacing each matching _Oldval with _Newval, checked dest
return (_Replace_copy(_First, _Last,
_Dest, _Oldval, _Newval,
_Iter_cat(_First), _Iter_cat(_Dest)));
}
template<class _InIt,
class _OutIt,
class _Ty> inline
_SCL_INSECURE_DEPRECATE
_OutIt _Replace_copy(_InIt _First, _InIt _Last,
_OutIt _Dest, const _Ty& _Oldval, const _Ty& _Newval,
_STD tr1::false_type)
{ // copy replacing each matching _Oldval with _Newval, unchecked dest
return (_Replace_copy(_First, _Last,
_Dest, _Oldval, _Newval,
_Iter_cat(_First), _Iter_cat(_Dest)));
}
template<class _InIt,
class _OutIt,
class _Ty> inline
_OutIt replace_copy(_InIt _First, _InIt _Last,
_OutIt _Dest, const _Ty& _Oldval, const _Ty& _Newval)
{ // copy replacing each matching _Oldval with _Newval
_DEBUG_RANGE(_First, _Last);
_DEBUG_POINTER(_Dest);
return (_Replace_copy(_Unchecked(_First), _Unchecked(_Last),
_Dest, _Oldval, _Newval,
_Is_checked(_Dest)));
}
template<class _InIt,
class _OutTy,
size_t _OutSize,
class _Ty> inline
_OutTy *replace_copy(_InIt _First, _InIt _Last,
_OutTy (&_Dest)[_OutSize], const _Ty& _Oldval, const _Ty& _Newval)
{ // copy replacing each matching _Oldval with _Newval, array dest
return (_Unchecked(
_STD replace_copy(_First, _Last,
_Array_iterator<_OutTy, _OutSize>(_Dest), _Oldval, _Newval)));
}
#endif /* _ITERATOR_DEBUG_LEVEL == 0 */
// TEMPLATE FUNCTION replace_copy_if
template<class _InIt,
class _OutIt,
class _Pr,
class _Ty> inline
_OutIt _Replace_copy_if(_InIt _First, _InIt _Last,
_OutIt _Dest, _Pr _Pred, const _Ty& _Val)
{ // copy replacing each satisfying _Pred with _Val
for (; _First != _Last; ++_First, ++_Dest)
*_Dest = _Pred(*_First) ? _Val : *_First;
return (_Dest);
}
#if _ITERATOR_DEBUG_LEVEL == 0
template<class _InIt,
class _OutIt,
class _Pr,
class _Ty> inline
_OutIt replace_copy_if(_InIt _First, _InIt _Last,
_OutIt _Dest, _Pr _Pred, const _Ty& _Val)
{ // copy replacing each satisfying _Pred with _Val
return (_Replace_copy_if(_Unchecked(_First), _Unchecked(_Last),
_Dest, _Pred, _Val));
}
#else /* _ITERATOR_DEBUG_LEVEL == 0 */
template<class _InIt,
class _OutIt,
class _Pr,
class _Ty> inline
_OutIt _Replace_copy_if(_InIt _First, _InIt _Last,
_OutIt _Dest, _Pr _Pred, const _Ty& _Val,
input_iterator_tag, output_iterator_tag)
{ // copy replacing each satisfying _Pred, arbitrary iterators
return (_Replace_copy_if(_First, _Last,
_Dest, _Pred, _Val));
}
template<class _InIt,
class _OutIt,
class _Pr,
class _Ty> inline
_OutIt _Replace_copy_if(_InIt _First, _InIt _Last,
_OutIt _Dest, _Pr _Pred, const _Ty& _Val,
random_access_iterator_tag, random_access_iterator_tag)
{ // copy replacing each satisfying _Pred, random_access iterators
_OutIt _Ans = _Dest + (_Last - _First); // also checks range
_Replace_copy_if(_First, _Last,
_Unchecked(_Dest), _Pred, _Val);
return (_Ans);
}
template<class _InIt,
class _OutIt,
class _Pr,
class _Ty> inline
_OutIt _Replace_copy_if(_InIt _First, _InIt _Last,
_OutIt _Dest, _Pr _Pred, const _Ty& _Val,
_STD tr1::true_type)
{ // copy replacing each satisfying _Pred with _Val, checked dest
return (_Replace_copy_if(_First, _Last,
_Dest, _Pred, _Val,
_Iter_cat(_First), _Iter_cat(_Dest)));
}
template<class _InIt,
class _OutIt,
class _Pr,
class _Ty> inline
_SCL_INSECURE_DEPRECATE
_OutIt _Replace_copy_if(_InIt _First, _InIt _Last,
_OutIt _Dest, _Pr _Pred, const _Ty& _Val,
_STD tr1::false_type)
{ // copy replacing each satisfying _Pred with _Val, unchecked dest
return (_Replace_copy_if(_First, _Last,
_Dest, _Pred, _Val,
_Iter_cat(_First), _Iter_cat(_Dest)));
}
template<class _InIt,
class _OutIt,
class _Pr,
class _Ty> inline
_OutIt replace_copy_if(_InIt _First, _InIt _Last,
_OutIt _Dest, _Pr _Pred, const _Ty& _Val)
{ // copy replacing each satisfying _Pred with _Val
_DEBUG_RANGE(_First, _Last);
_DEBUG_POINTER(_Dest);
_DEBUG_POINTER(_Pred);
return (_Replace_copy_if(_Unchecked(_First), _Unchecked(_Last),
_Dest, _Pred, _Val,
_Is_checked(_Dest)));
}
template<class _InIt,
class _OutTy,
size_t _OutSize,
class _Pr,
class _Ty> inline
_OutTy *replace_copy_if(_InIt _First, _InIt _Last,
_OutTy (&_Dest)[_OutSize], _Pr _Pred, const _Ty& _Val)
{ // copy replacing each satisfying _Pred with _Val, array dest
return (_Unchecked(
_STD replace_copy_if(_First, _Last,
_Array_iterator<_OutTy, _OutSize>(_Dest), _Pred, _Val)));
}
#endif /* _ITERATOR_DEBUG_LEVEL == 0 */
// TEMPLATE FUNCTION generate
template<class _FwdIt,
class _Fn0> inline
void _Generate(_FwdIt _First, _FwdIt _Last, _Fn0 _Func)
{ // replace [_First, _Last) with _Func()
for (; _First != _Last; ++_First)
*_First = _Func();
}
template<class _FwdIt,
class _Fn0> inline
void generate(_FwdIt _First, _FwdIt _Last, _Fn0 _Func)
{ // replace [_First, _Last) with _Func()
_DEBUG_RANGE(_First, _Last);
_DEBUG_POINTER(_Func);
_Generate(_Unchecked(_First), _Unchecked(_Last), _Func);
}
// TEMPLATE FUNCTION generate_n
template<class _OutIt,
class _Diff,
class _Fn0> inline
void _Generate_n(_OutIt _Dest, _Diff _Count, _Fn0 _Func)
{ // replace [_Dest, _Dest + _Count) with _Func()
for (; 0 < _Count; --_Count, ++_Dest)
*_Dest = _Func();
}
#if _ITERATOR_DEBUG_LEVEL == 0
template<class _OutIt,
class _Diff,
class _Fn0> inline
void generate_n(_OutIt _Dest, _Diff _Count, _Fn0 _Func)
{ // replace [_Dest, _Dest + _Count) with _Func()
_Generate_n(_Dest, _Count, _Func);
}
#else /* _ITERATOR_DEBUG_LEVEL == 0 */
template<class _OutIt,
class _Diff,
class _Fn0> inline
void _Generate_n1(_OutIt _Dest, _Diff _Count, _Fn0 _Func,
output_iterator_tag)
{ // replace [_Dest, _Dest + _Count), arbitrary iterators
_Generate_n(_Dest, _Count, _Func);
}
template<class _OutIt,
class _Diff,
class _Fn0> inline
void _Generate_n1(_OutIt _Dest, _Diff _Count, _Fn0 _Func,
random_access_iterator_tag)
{ // replace [_Dest, _Dest + _Count), random-access iterators
_OutIt _Ans = _Dest + _Count; // also checks range
_Ans = _Ans; // to quiet diagnostics
_Generate_n(_Unchecked(_Dest), _Count, _Func);
}
template<class _OutIt,
class _Diff,
class _Fn0> inline
void _Generate_n(_OutIt _Dest, _Diff _Count, _Fn0 _Func,
_STD tr1::true_type)
{ // replace [_Dest, _Dest + _Count) with _Func(), checked dest
_Generate_n1(_Dest, _Count, _Func,
_Iter_cat(_Dest));
}
template<class _OutIt,
class _Diff,
class _Fn0> inline
_SCL_INSECURE_DEPRECATE
void _Generate_n(_OutIt _Dest, _Diff _Count, _Fn0 _Func,
_STD tr1::false_type)
{ // replace [_Dest, _Dest + _Count) with _Func(), unchecked dest
_Generate_n1(_Dest, _Count, _Func,
_Iter_cat(_Dest));
}
template<class _OutIt,
class _Diff,
class _Fn0> inline
void generate_n(_OutIt _Dest, _Diff _Count, _Fn0 _Func)
{ // replace [_Dest, _Dest + _Count) with _Func()
_DEBUG_POINTER(_Dest);
_DEBUG_POINTER(_Func);
_Generate_n(_Dest, _Count, _Func,
_Is_checked(_Dest));
}
template<class _OutTy,
size_t _OutSize,
class _Diff,
class _Fn0> inline
void generate_n(_OutTy (&_Dest)[_OutSize], _Diff _Count, _Fn0 _Func)
{ // replace [_Dest, _Dest + _Count) with _Func(), array dest
_STD generate_n(_Array_iterator<_OutTy, _OutSize>(_Dest), _Count, _Func);
}
#endif /* _ITERATOR_DEBUG_LEVEL == 0 */
// TEMPLATE FUNCTION remove_copy
template<class _InIt,
class _OutIt,
class _Ty> inline
_OutIt _Remove_copy(_InIt _First, _InIt _Last,
_OutIt _Dest, const _Ty& _Val)
{ // copy omitting each matching _Val
for (; _First != _Last; ++_First)
if (!(*_First == _Val))
*_Dest++ = *_First;
return (_Dest);
}
#if _ITERATOR_DEBUG_LEVEL == 0
template<class _InIt,
class _OutIt,
class _Ty> inline
_OutIt remove_copy(_InIt _First, _InIt _Last,
_OutIt _Dest, const _Ty& _Val)
{ // copy omitting each matching _Val
return (_Remove_copy(_Unchecked(_First), _Unchecked(_Last),
_Dest, _Val));
}
#else /* _ITERATOR_DEBUG_LEVEL == 0 */
template<class _InIt,
class _OutIt,
class _Ty> inline
_OutIt _Remove_copy(_InIt _First, _InIt _Last,
_OutIt _Dest, const _Ty& _Val,
_STD tr1::true_type)
{ // copy omitting each matching _Val, checked dest
return (_Remove_copy(_First, _Last,
_Dest, _Val));
}
template<class _InIt,
class _OutIt,
class _Ty> inline
_SCL_INSECURE_DEPRECATE
_OutIt _Remove_copy(_InIt _First, _InIt _Last,
_OutIt _Dest, const _Ty& _Val,
_STD tr1::false_type)
{ // copy omitting each matching _Val, unchecked dest
return (_Remove_copy(_First, _Last,
_Dest, _Val));
}
template<class _InIt,
class _OutIt,
class _Ty> inline
_OutIt remove_copy(_InIt _First, _InIt _Last,
_OutIt _Dest, const _Ty& _Val)
{ // copy omitting each matching _Val
_DEBUG_RANGE(_First, _Last);
_DEBUG_POINTER(_Dest);
return (_Remove_copy(_Unchecked(_First), _Unchecked(_Last),
_Dest, _Val,
_Is_checked(_Dest)));
}
template<class _InIt,
class _OutTy,
size_t _OutSize,
class _Ty> inline
_OutTy *remove_copy(_InIt _First, _InIt _Last,
_OutTy (&_Dest)[_OutSize], const _Ty& _Val)
{ // copy omitting each matching _Val, array dest
return (_Unchecked(
_STD remove_copy(_First, _Last,
_Array_iterator<_OutTy, _OutSize>(_Dest), _Val)));
}
#endif /* _ITERATOR_DEBUG_LEVEL == 0 */
// TEMPLATE FUNCTION remove_copy_if
template<class _InIt,
class _OutIt,
class _Pr> inline
_OutIt _Remove_copy_if(_InIt _First, _InIt _Last,
_OutIt _Dest, _Pr _Pred)
{ // copy omitting each element satisfying _Pred
for (; _First != _Last; ++_First)
if (!_Pred(*_First))
*_Dest++ = *_First;
return (_Dest);
}
#if _ITERATOR_DEBUG_LEVEL == 0
template<class _InIt,
class _OutIt,
class _Pr> inline
_OutIt remove_copy_if(_InIt _First, _InIt _Last,
_OutIt _Dest, _Pr _Pred)
{ // copy omitting each element satisfying _Pred
return (_Remove_copy_if(_Unchecked(_First), _Unchecked(_Last),
_Dest, _Pred));
}
#else /* _ITERATOR_DEBUG_LEVEL == 0 */
template<class _InIt,
class _OutIt,
class _Pr> inline
_OutIt _Remove_copy_if(_InIt _First, _InIt _Last,
_OutIt _Dest, _Pr _Pred,
_STD tr1::true_type)
{ // copy omitting each element satisfying _Pred, checked dest
return (_Remove_copy_if(_First, _Last,
_Dest, _Pred));
}
template<class _InIt,
class _OutIt,
class _Pr> inline
_SCL_INSECURE_DEPRECATE
_OutIt _Remove_copy_if(_InIt _First, _InIt _Last,
_OutIt _Dest, _Pr _Pred,
_STD tr1::false_type)
{ // copy omitting each element satisfying _Pred, unchecked dest
return (_Remove_copy_if(_First, _Last,
_Dest, _Pred));
}
template<class _InIt,
class _OutIt,
class _Pr> inline
_OutIt remove_copy_if(_InIt _First, _InIt _Last,
_OutIt _Dest, _Pr _Pred)
{ // copy omitting each element satisfying _Pred
_DEBUG_RANGE(_First, _Last);
_DEBUG_POINTER(_Dest);
_DEBUG_POINTER(_Pred);
return (_Remove_copy_if(_Unchecked(_First), _Unchecked(_Last),
_Dest, _Pred,
_Is_checked(_Dest)));
}
template<class _InIt,
class _OutTy,
size_t _OutSize,
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -