Какие контейнеры допустимы для использования с std::random_shuffle( RandomIt first, RandomIt last )
?
В описании API говорится, что два итератора должны быть итераторами с произвольным доступом - наверное, я не совсем понимаю, что итератор с произвольным доступом, а именно, почему std::vector::begin()
и ::end()
, но то же самое из std::set
и std::unordered_set
- нет.
#include <algorithm>
#include <set>
#include <unordered_set>
#include <vector>
int main( int argc, char* argv[] )
{
std::set<int> s = { 1, 2, 3, 4, 5 };
std::unordered_set<int> u = { 1, 2, 3, 4, 5 };
std::vector<int> v = { 1, 2, 3, 4, 5 };
std::random_shuffle( s.begin(), s.end() ); // compile error
std::random_shuffle( u.begin(), u.end() ); // compile error
std::random_shuffle( v.begin(), v.end() ); // :)
return 0;
}