52 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// <algorithm>10 11// template <class RandomAccessIterator>12// void13// random_shuffle(RandomAccessIterator first, RandomAccessIterator last);14//15// template <class RandomAccessIterator, class RandomNumberGenerator>16// void17// random_shuffle(RandomAccessIterator first, RandomAccessIterator last,18// RandomNumberGenerator& rand);19 20//21// In C++17, random_shuffle has been removed.22// However, for backwards compatibility, if _LIBCPP_ENABLE_CXX17_REMOVED_RANDOM_SHUFFLE23// is defined before including <algorithm>, then random_shuffle will be restored.24 25// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_ENABLE_CXX17_REMOVED_RANDOM_SHUFFLE26// ADDITIONAL_COMPILE_FLAGS: -D_LIBCPP_DISABLE_DEPRECATION_WARNINGS27 28#include <algorithm>29#include <cstddef>30#include <vector>31 32#include "test_macros.h"33 34struct gen35{36 std::ptrdiff_t operator()(std::ptrdiff_t n)37 {38 return n-1;39 }40};41 42 43int main(int, char**)44{45 std::vector<int> v;46 std::random_shuffle(v.begin(), v.end());47 gen r;48 std::random_shuffle(v.begin(), v.end(), r);49 50 return 0;51}52