Я пытаюсь создать не повторяющийся индекс (0-51) в массиве и хранить в нем целые числа. Но выход кажется странным. Ниже мой код:
#include <iostream> // std::cout
#include <algorithm> // std::random_shuffle
#include <vector> // std::vector
#include <ctime> // std::time
#include <cstdlib> // std::rand, std::srand
// random generator function:
int myrandom (int i)
{
return std::rand()%i;
}
int main ()
{
int* temp = new int[52];
std::srand ( unsigned ( std::time(0) ) );
std::vector<int> myvector;
// set some values:
for (int i=0; i<52; ++i) myvector.push_back(i);
// using built-in random generator:
std::random_shuffle ( myvector.begin(), myvector.end() );
// using myrandom:
std::random_shuffle ( myvector.begin(), myvector.end(), myrandom);
std::vector<int>::iterator it=myvector.begin();
for(int i = 1;i<=24;i++)
{
temp[*it] = i;
it++;
}
for(int i = 0;i<52;i++)
{
std::cout << temp[i];
std::cout << '\n';
}
delete[]temp;
temp = NULL;
return 0;
}
Что здесь не так?
Out-put содержит очень большое количество, например: 1998373
new int[52]
возвращает неинициализированную память. Вы устанавливаете только 24 из этих значений, остальные остаются неинициализированными. Может быть, это:
for(int i = 1;i<=24;i++)
{
temp[*it] = i;
it++;
}
должен был быть
for(int i = 1;i<52;i++)
{
temp[*it] = i;
it++;
}
? Или задайте все значения в явном виде 0
после выделения.
0
:for (int i=0; i<52; ++i) temp[i]=0;
или что-то подобное (поместите это сразу после того, как вы установилиtemp
сnew
).