add algorithm::find_last
This commit is contained in:
parent
0a55b0326e
commit
eb3c273376
|
@ -276,6 +276,20 @@ R find(R range, const T &v) {
|
||||||
return range;
|
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>
|
template<typename R, typename P>
|
||||||
R find_if(R range, P pred) {
|
R find_if(R range, P pred) {
|
||||||
for (; !range.empty(); range.pop_front())
|
for (; !range.empty(); range.pop_front())
|
||||||
|
|
|
@ -68,10 +68,10 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
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
|
!IsConstructible<ConstCharRange, const T &>::value, StNat
|
||||||
> = StNat()) {
|
> = StNat()) {
|
||||||
write(ostd::to_string(v));
|
return write(ostd::to_string(v));
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -113,7 +113,7 @@ public:
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
bool write(const T &v) {
|
bool write(const T &v) {
|
||||||
write_impl(v);
|
return write_impl(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, typename ...A>
|
template<typename T, typename ...A>
|
||||||
|
|
Loading…
Reference in a new issue