1134 _ForwardIterator
1135 remove_if(_ForwardIterator __first, _ForwardIterator __last,
1136 _Predicate __pred)
1137 {
1144
1145 __first = std::find_if(__first, __last, __pred);
1146 _ForwardIterator __i = __first;
1147 return __first == __last ? __first
1148 : std::remove_copy_if(++__i, __last,
1149 __first, __pred);
1150 }
183 inline _InputIterator
184 find_if(_InputIterator __first, _InputIterator __last,
185 _Predicate __pred, input_iterator_tag)
186 {
187 while (__first != __last && !__pred(*__first))
188 ++__first;
189 return __first;
190 }
1060 typename _Predicate>
1061 _OutputIterator
1062 remove_copy_if(_InputIterator __first, _InputIterator __last,
1063 _OutputIterator __result, _Predicate __pred)
1064 {
1072
1073 for ( ; __first != __last; ++__first)
1074 if (!__pred(*__first))
1075 {
1076 *__result = *__first;
1077 ++__result;
1078 }
1079 return __result;
1080 }
1096 typename _Compare, typename _Alloc>
1097 typename _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::iterator
1098 _Rb_tree<_Key,_Val,_KeyOfValue,_Compare,_Alloc>::find(const _Key& __k)
1099 {
1100 _Link_type __x = _M_begin(); // Current node.
1101 _Link_type __y = _M_end(); // Last node which is not less than __k.
1102
1103 while (__x != 0)
1104 if (!_M_impl._M_key_compare(_S_key(__x), __k))
1105 __y = __x, __x = _S_left(__x);
1106 else
1107 __x = _S_right(__x);
1108
1109 iterator __j = iterator(__y);
1110 return (__j == end()
1111 || _M_impl._M_key_compare(__k, _S_key(__j._M_node))) ? end() : __j;
1112 }