【发布时间】:2013-10-20 17:56:28
【问题描述】:
我正在尝试在数组中生成非重复索引 (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;
}
这里出了什么问题?
输出包含非常大的数字,例如:1998373
【问题讨论】:
-
对不起,我编辑了它。但它仍然不能产生正确的输出。
-
你为什么只设置
temp的24个元素? -
更重要的是,为什么只设置24,然后尝试打印出所有52?
-
@CareyGregory 因为我需要让 24 个元素随机分布在一个数组中,并将其余索引设置为 1。
-
@14K :您没有在代码中将剩余数组设置为 1。用
std::fill(temp, temp+51, 1);初始化temp,然后执行for循环。