哪些容器可与std :: random_shuffle一起使用?

问题描述 投票:0回答:1

哪些容器可以与std::random_shuffle( RandomIt first, RandomIt last )一起使用?

API description说两个迭代器需要是随机访问迭代器-我想我不清楚什么是随机访问迭代器,尤其是为什么std::vector::begin()和和::end()是,但是与std::setstd::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;
}
c++ stl containers shuffle random-access
1个回答
2
投票

如果您查看set,然后到iterator类成员,它将告诉您迭代器类型,在这种情况下为BidirectionalIterator。 (为此,可以忽略“旧版”位)。

© www.soinside.com 2019 - 2024. All rights reserved.