From 08bc0a281559d6975140ccc9816e3ba7435c92b5 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Thu, 7 Dec 2023 19:28:05 +0200 Subject: [PATCH] BAN: Implement next() and prev() for iterators and use them in sorts --- BAN/include/BAN/Iterators.h | 31 +++++++++++++++++++++++++++++++ BAN/include/BAN/Sort.h | 4 ++-- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/BAN/include/BAN/Iterators.h b/BAN/include/BAN/Iterators.h index 5c01d549..36af28bf 100644 --- a/BAN/include/BAN/Iterators.h +++ b/BAN/include/BAN/Iterators.h @@ -1,10 +1,41 @@ #pragma once #include +#include namespace BAN { + template + It next(It it, size_t count) + { + for (size_t i = 0; i < count; i++) + ++it; + return it; + } + + template + requires requires(It it, size_t n) { requires is_same_v; } + It next(It it, size_t count) + { + return it + count; + } + + template + It prev(It it, size_t count) + { + for (size_t i = 0; i < count; i++) + --it; + return it; + } + + template + requires requires(It it, size_t n) { requires is_same_v; } + It prev(It it, size_t count) + { + return it - count; + } + template class IteratorSimpleGeneral { diff --git a/BAN/include/BAN/Sort.h b/BAN/include/BAN/Sort.h index e30e5fb5..22af766d 100644 --- a/BAN/include/BAN/Sort.h +++ b/BAN/include/BAN/Sort.h @@ -10,7 +10,7 @@ namespace BAN void sort_exchange(It begin, It end, Comp comp = {}) { for (It lhs = begin; lhs != end; ++lhs) - for (It rhs = lhs; ++rhs != end;) + for (It rhs = next(lhs, 1); rhs != end; ++rhs) if (!comp(*lhs, *rhs)) swap(*lhs, *rhs); } @@ -21,7 +21,7 @@ namespace BAN template It sort_quick_partition(It begin, It end, Comp comp) { - It pivot = end; --pivot; + It pivot = prev(end, 1); It it1 = begin; for (It it2 = begin; it2 != pivot; ++it2)