yumetodo氏が、以前書いた乱数配列生成器の速度測定結果を書いてくれたんですが、あまりにも遅いと思い、他にも作れないかなと考えてみました。ただ、寝起きの状態で思いついた方法なので色々お察しだろうなと思ってましたが、案の定お察しの通りでしたw
実際これ書いてみたのは目が完全に覚めてからなんですが、寝起きの発想でもやっぱり気にはなったのでとりあえず書いてビルドした次第であります。
すごくメモリに優しくないプログラムです。
正直自分でも呆れてしまってます。
source.cpp
#include <iostream>
#include <vector>
#include <algorithm>
auto make_rand_array(const size_t arr_size, int rand_min, int rand_max) {
if (rand_max < rand_min) std::swap(rand_min, rand_max);
std::vector<int> arr(rand_max - rand_min + 1);
int i = rand_min;
for (auto itr = arr.begin(); itr != arr.end(); ++itr, i++) {
*itr = i;
}
std::random_shuffle(arr.begin(), arr.end());
if(arr.size() > arr_size) arr.erase(arr.begin() + arr_size, arr.end());
return arr;
}
使用例は以前のと同じです。
以上、ただのお遊びでした。