【发布时间】:2018-01-20 10:41:33
【问题描述】:
我正在尝试生成一个没有相同元素的枚举数组,但我所做的仍然给了我重复元素
const int MAXNO = 6;
enum Fruit {Durian, Papaya, Apple, Orange, Mango, Jackfruit, Strawberry};
int main ()
{
srand (time (NULL));
int size = rand () % 6 + 1;
Fruit f [size];
cout << "Size: " << size << endl;
for (int i = 0; i < size; i++)
{
f[i] = static_cast <Fruit>(rand() % MAXNO);
for (int j = 0; j < i; j++)
{
do
{
f[i] = static_cast <Fruit>(rand() % MAXNO);
}while(f[i] == f[j]);
}
cout << f[i] << endl;
}
}
我做错了什么?
【问题讨论】:
-
Fruit f [size];其中size不是编译时间常数,作为 C++ 代码无效,尽管它可以被一些编译器接受为语言扩展(然后可能以 C99 可变参数数组为模型)。请改用std::vector。 -
使用 0、1、2、3 等填充数组的一种简单方法是使用
std::iota。然后使用std::shuffle打乱该数组。 -
@Cheersandhth.-Alf,即使我更改为 const 数字,它仍然有重复元素
-
你为什么期望你的内部 for 循环来防止重复?
-
@Cheersandhth.-Alf,我不允许使用我在课堂上没有学过的东西来编码。所以vector和shuffle和iota,我不能使用。还是谢谢