LINUX.ORG.RU

Зарандомить вектором?

 


0

1

Есть такой вот вектор,нужно зарандомить что-то вроде такого vectordrum[random]; где random from [0,vectordrum.size()]; чтобы не выходило за значения вектора.

vector<string>vectordrum;
vectordrum.push_back("str1");
vectordrum.push_back("str2");
vectordrum.push_back("str3");
vectordrum.push_back("str4");
int min=0,max=vectordrum.size(),random;

srand(time(0));
for(int__ i=0;i<countdrums;i++)
    {
        glPushMatrix();
        glRotatef(rotate[i],1,0,0);
        for(int__ j=0;j<counttextureondrums;j++)
        {
			random = ((int__)((float__)rand() / RAND_MAX*(max_ - min_) + min_));
			glBindTexture(GL_TEXTURE_2D,/*GetTexture(drum[i][j]-4)*/image->IndexTexture[FindTexture(vectordrum[random]/*"auto4"*/)]);
            EnableTexture(i,j);
        }
        glPopMatrix();
    }

Еще куда поместить вызов srand(time(0)); чтобы при вызове функции rand() в цикле получались разные числа, потому что у меня одинаковые



Последнее исправление: Gremlin_ (всего исправлений: 2)

Если стандартный рандом недостаточно рандомный, то самым простым решением будет взять /dev/urnadom или /dev/random. Если, конечно, это не приведет к весомому падению производительности.

Aswed ★★★★★
()

c++

std::vector v {1, 2, 3, 4, 5};

std::mt19937 gen {std::random_device {}()};
std::uniform_int_distribution<int> dist(0, v.size() - 1);

auto index = bind(dist, gen);
std::cout << v[index()] << '\n';

g++ -std=c++17

Rot1
()
Последнее исправление: Rot1 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.