add algorithm::find_last

This commit is contained in:
q66 2015-08-16 11:35:06 -07:00
parent 0a55b0326e
commit eb3c273376
2 changed files with 17 additions and 3 deletions

View file

@ -276,6 +276,20 @@ R find(R range, const T &v) {
return range;
}
template<typename R, typename T>
R find_last(R range, const T &v) {
range = find(range, v);
if (!range.empty()) for (;;) {
R prev = range;
prev.pop_front();
R r = find(prev, v);
if (r.empty())
break;
prev = r;
}
return range;
}
template<typename R, typename P>
R find_if(R range, P pred) {
for (; !range.empty(); range.pop_front())

View file

@ -68,10 +68,10 @@ private:
}
template<typename T>
inline void write_impl(const T &v, EnableIf<
inline bool write_impl(const T &v, EnableIf<
!IsConstructible<ConstCharRange, const T &>::value, StNat
> = StNat()) {
write(ostd::to_string(v));
return write(ostd::to_string(v));
}
public:
@ -113,7 +113,7 @@ public:
template<typename T>
bool write(const T &v) {
write_impl(v);
return write_impl(v);
}
template<typename T, typename ...A>