比较单个数组中的所有元素

时间:2013-11-07 00:03:38

标签: c++ visual-c++

只是想开始道歉,如果这已被回答,并且应该措辞不同,所以我无法找到它。我一直在研究这个特殊问题几个小时,而且我的Google Fu可能很弱。

对于我的c ++类,我必须创建一个随机数生成器,它从用户收集数据以指定数字必须的位数和要创建的rands数。我可以很好地创建randoms,唯一的问题是数字在任何时候都不能复制,我在最后创建的if循环递减总是返回true而我无法弄清楚原因。因此,循环永远不会继续增加i。如果我没弄错的话,第一次尝试就不可能有重复的条目吗?

void TargetGen::genNumbers()
{
    int mod = 0;
    int baseMod = 0;

    if(Digits != 1)
    {
        baseMod = pow(10.0,(Digits -1));
    }
    mod = (pow(10.0,Digits))-baseMod;


    for(int i=0;i<Numbers;i++)
    {
        cout << "front of i loop, value of i: " << i << endl;
        int randomTemp;

        randomTemp = rand() % mod + baseMod;

        targets[i] = randomTemp;
        cout << "rand: " << targets[i] << endl;
        for(int k = 0;k <= Numbers; k++)
        {
            if(targets[k] == targets[i])
            {
                cout << targets[i] << endl;
                i--;
            }
            cout << " k looping, k value: " << k << endl;
            cout << " k loop, value of i: " << i << endl;

        }
    }
}

4 个答案:

答案 0 :(得分:0)

你有没有在任何地方初始化“目标”?我在c ++方面有点弱(我多年没有用它编写代码),但我没有看到它在任何地方声明...所以我猜它总是返回true,因为目标没有在任何地方初始化......我可能错了。

答案 1 :(得分:0)

内部循环将新条目与数组中的所有条目进行比较,包括自身。限制k小于i,你应该没事。

答案 2 :(得分:0)

我建议你从评论中遵循Zac Howland的建议,使用set代替向量并继续检查大小,或者更确切地说是否插入了。类似的东西:

int insertedNumbers = 0;
set<int> targets;
while (insertedNumbers != Numbers) {
    int randomTemp = rand() % mod + baseMod;

    pair<set<int>::iterator, bool> insertionResult = targets.insert(randomTemp);

    if(insertionResult.second) insertedNumbers ++;
}

cout << "Random numbers:" << targets.size() << endl; // Should equal Numbers

答案 3 :(得分:0)

我有几点建议:

1)rand()通常需要播种。如果你每次运行它都得到相同的数字,你可能忘了播种: http://www.cplusplus.com/reference/cstdlib/rand/

2)如果您无法重复生成的随机数,并且您没有创建大量的随机数,则可能需要将每个结果放入集合或排序列表中。这样你就可以检查你所知道的内容。

3)通常数字表示一个类,因为N是大写的。如果必须,请使用numberOfNumbers,这是一个更清晰的变量名称。