すべてはあなたのプログラムの要件によります。以下は、あなたが探しているかもしれない潜在的な要件です。

- 特定の要素が何度もアクセスされたり、見逃されたりしても気にしないのであれば、データをシャッフルする必要はない。次のように乱数を使用してデータにアクセスするだけです。arr[rand()%size]`。
- もし、元の配列を変更したくないのであれば、配列を複製して、このデータに対してシャッフルを行うこともできる。もう一つの方法は、インデックスの配列を作成し、インデックスをシャッフルすることです。これは次のようになる。
```
int indexes[size];//create index array
for (int i = 0;i<size;i++) indexes[i] = i;//initialize with each possible index
shuffle(indexes,size);//shuffle the indexes
```
要素にアクセスするときは、`arr[indexes[i]]`とする。

- シャッフルアルゴリズムの実装を気にせず、より簡潔なコードを作りたいのであれば、**<アルゴリズム>**ライブラリの**std::random_shuffle**アルゴリズムを使うことができる。

もし他に必要なものがあれば教えてください！
It all depends on your requirements for your program. Here are some potential requirements that might be what your looking for.

- If you do not care if certain elements are accessed multiple times or missed then you do not need to shuffle any data around. You could simply access the data using a random number like this. `arr[rand()%size]`. 
- If your requirement is that you don't want to modify the original array you could make a duplicate array and perform the shuffle on this data. Another way is to create an array of the indexes and shuffle the indexes around. This could look like...
```
int indexes[size];//create index array
for (int i = 0;i<size;i++) indexes[i] = i;//initialize with each possible index
shuffle(indexes,size);//shuffle the indexes
```
then when you access an element you do `arr[indexes[i]]`

- If you want to make code that is more concise and don't care about the implementation of the shuffle algorithm you could use the **std::random_shuffle** algorithm from the **<algorithm>** library. 

If you have another requirement in mind let me know!