human
C ++を使用して、各アイテムをアレイでランダムな順序でアレイで反復するにはどうすればよいですか？
gpt
各要素にアクセスするのは一度だけで、元の配列には手を加えたくないのだろう。

そのためには、まずランダムなインデックスの新しい配列を作成し、配列にアクセスするときにそのインデックスを使用します。この方法には、元の配列を変更しないという利点がある。たとえば、**[6,8,13]** という数字の配列があり、これにランダムな順番でアクセスしたいとします。この配列の長さは3なので、このサイズの新しいインデックス配列を作成し、各インデックスを **[0,1,2]** とします。  そして、この配列を**std::random_shuffle**関数を使ってシャッフルし、**[1,2,0]**のような配列を得ます。そして、ループを反復して要素にアクセスするときに、index_arrayからインデックスを取得して（ランダムな順序で）元の配列にアクセスします。これは、**my_array[index_array[i]]**のようになります。

以下にプログラム例を示す。
```
#include <iostream> 
#include <algorithm>
#include <ctime>
#include <cstdlib>
                                                                                    
int main(){                                                 
        std::srand( unsigned (std::time(0)));//set seed 

        const int size_of_array = 3;//array length

        int my_array[size_of_array] = {6,8,13};//data

        int index_array[size_of_array];//index array
        int i;
        for(i = 0;i < size_of_array;i++) index_array[i] = i;//initialize indexes
        std::random_shuffle(index_array,index_array+size_of_array);//shuffle indexes

        for(i = 0;i < size_of_array;i++){//access in random order
                int random_index = index_array[i];
                std::cout << my_array[random_index] << std::endl;
        }

}
```
human
このコードの時間の複雑さはどのくらいですか？これをより速くすることはできますか？