mirror of
https://github.com/wichtounet/thor-os.git
synced 2025-09-09 20:43:34 -04:00
std::find(-if) / std::remove(-if) algorithms
This commit is contained in:
parent
b646873678
commit
4bdec39c35
@ -232,7 +232,7 @@ void for_each(Iterator it, Iterator end, Functor func){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class Iterator, class T>
|
template<typename Iterator, typename T>
|
||||||
T accumulate(Iterator it, Iterator end, T init){
|
T accumulate(Iterator it, Iterator end, T init){
|
||||||
while(it != end){
|
while(it != end){
|
||||||
init = init + *it;
|
init = init + *it;
|
||||||
@ -243,6 +243,58 @@ T accumulate(Iterator it, Iterator end, T init){
|
|||||||
return init;
|
return init;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename Iterator, typename T>
|
||||||
|
Iterator find(Iterator first, Iterator last, const T& value){
|
||||||
|
for (; first != last; ++first) {
|
||||||
|
if (*first == value) {
|
||||||
|
return first;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return last;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Iterator, typename Pred>
|
||||||
|
Iterator find_if(Iterator first, Iterator last, Pred pred) {
|
||||||
|
for (; first != last; ++first) {
|
||||||
|
if (pred(*first)) {
|
||||||
|
return first;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return last;
|
||||||
|
}
|
||||||
|
|
||||||
|
template< typename Iterator, typename T >
|
||||||
|
Iterator remove(Iterator first, Iterator last, const T& value){
|
||||||
|
first = std::find(first, last, value);
|
||||||
|
|
||||||
|
if (first != last){
|
||||||
|
for(auto it = first; ++it != last; ){
|
||||||
|
if (!(*it == value)){
|
||||||
|
*first++ = std::move(*it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return first;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Iterator, typename Pred>
|
||||||
|
Iterator remove_if(Iterator first, Iterator last, Pred pred) {
|
||||||
|
first = std::find_if(first, last, pred);
|
||||||
|
|
||||||
|
if (first != last) {
|
||||||
|
for (auto it = first; ++it != last;) {
|
||||||
|
if (!pred(*it)) {
|
||||||
|
*first++ = std::move(*it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return first;
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr const T& min(const T& a, const T& b){
|
constexpr const T& min(const T& a, const T& b){
|
||||||
return a <= b ? a : b;
|
return a <= b ? a : b;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user