11 struct ShuffleFunction {
12 template<concepts::RandomAccessIterator It, concepts::SentinelFor<It> Sent,
typename Gen>
13 requires(concepts::Permutable<It> && concepts::UniformRandomBitGenerator<meta::RemoveReference<Gen>>)
14 constexpr auto operator()(It
first, Sent
last, Gen&& generator)
const -> It {
16 using Distribution = random::UniformIntDistribution<SSizeType>;
17 using Param = Distribution::Param;
20 auto distribution = Distribution();
23 for (SSizeType i =
size - 1; i > 0; i--) {
24 auto j = distribution(generator, Param { 0, i });
30 template<concepts::RandomAccessContainer Con,
typename Gen>
31 requires(concepts::Permutable<meta::ContainerIterator<Con>> &&
32 concepts::UniformRandomBitGenerator<meta::RemoveReference<Gen>>)
39constexpr inline auto shuffle = detail::ShuffleFunction {};
constexpr auto last(concepts::detail::ConstantVector auto &vector, size_t count)
Definition vector_last.h:13
constexpr auto first(concepts::detail::ConstantVector auto &vector, size_t count)
Definition vector_first.h:13
constexpr auto shuffle
Definition shuffle.h:39
constexpr auto distance
Definition distance.h:44
constexpr auto size
Definition size.h:62
constexpr auto iterator_swap
Definition iterator_swap.h:49
constexpr auto end
Definition end.h:55
constexpr auto begin
Definition begin.h:52
Definition any_storable.h:9