std::shuffle`を使うと、配列をランダムな順序で繰り返し処理することができる。要素を表示するサンプルプログラムを以下に示す：

```c
#include <iostream>
#include <algorithm>
#include <random>
#include <chrono>
#include <algorithm>


int main () {
    int arr[5] = {1, 2, 3, 4, 5};													// the target array
    std::array<int, 5> indices;														// the indices array
    for (int i = 0; i < 5; i++) indices[i] = i;

    // obtain a time-based seed and use it to shuffle the indices array
    unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
    std::shuffle (indices.begin(), indices.end(), std::default_random_engine(seed));

    // access the items of the target array with shuffled indices
    for (int i = 0; i < 5; i++)
        std::cout << arr[indices[i]] << '\n';

    return 0;
}
```

対象となる配列の代わりにインデックス配列をシャッフルすることで、配列を変更したりコピーしたりすることなく、ランダムな順序で繰り返し処理を行います。このような制約がない場合は、ターゲット配列をシャッフルすることもできます。
You can use `std::shuffle` to iterate through an array in a random order. Here is an example program that displays the elements:

```c
#include <iostream>
#include <algorithm>
#include <random>
#include <chrono>
#include <algorithm>


int main () {
    int arr[5] = {1, 2, 3, 4, 5};													// the target array
    std::array<int, 5> indices;														// the indices array
    for (int i = 0; i < 5; i++) indices[i] = i;

    // obtain a time-based seed and use it to shuffle the indices array
    unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
    std::shuffle (indices.begin(), indices.end(), std::default_random_engine(seed));

    // access the items of the target array with shuffled indices
    for (int i = 0; i < 5; i++)
        std::cout << arr[indices[i]] << '\n';

    return 0;
}
```

By shuffling the indices array instead of the target one, the program iterates through the array in a random order without changing it or copying it. You can also shuffle the target array if there are no such constraints.