是否可以random_shuffle int元素数组?

Com*_*erd 18 c++ algorithm shuffle

我正在阅读这篇文章:http: //www.cplusplus.com/reference/algorithm/random_shuffle/,并想知道是否有可能对random_shuffle一个int元素数组.这是我的代码

#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    int a[10]={1,2,3,4,5,6,7,8,9,10};

    cout << a << endl << endl;

    random_shuffle(a[0],a[9]);

    cout<<a;
}
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

error C2893: Failed to specialize function template
    'iterator_traits<_Iter>::difference_type *std::_Dist_type(_Iter)'.
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 是否可以使用随机数组进行洗牌random_shuffle.如果是,我想学习如何做到这一点.

  2. 是否random_shuffle只适用于模板?

  3. 我的错误是什么意思?

das*_*ght 44

你需要传递指针,a[0]a[10]不是元素本身:

random_shuffle(&a[0], &a[10]); // end must be 10, not 9
Run Code Online (Sandbox Code Playgroud)

在C++ 11中,您可以使用std::beginstd::end:

random_shuffle(std::begin(a), std::end(a));
Run Code Online (Sandbox Code Playgroud)

  • @Computernerd,指针是随机访问迭代器,它需要两个迭代器. (3认同)