【发布时间】:2020-07-23 19:55:56
【问题描述】:
哪些容器可以与std::random_shuffle( RandomIt first, RandomIt last ) 一起使用?
API description 说这两个迭代器需要是随机访问迭代器——我想我不清楚什么是随机访问迭代器,特别是为什么 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;
}
【问题讨论】:
-
不要使用
std::random_shuffle。它在 C++14 中被弃用,在 C++17 中被移除。请改用std::shuffle。
标签: c++ stl containers shuffle random-access