在范围内生成一组唯一的元素 开始我只是学习C++。p>

在范围内生成一组唯一的元素 开始我只是学习C++。p>,c++,vector,C++,Vector,我试图创建一个包含四个不同整数的向量,范围为0:9。每次运行程序时,我都使用seed和randint()函数获取不同的随机数。我遇到的问题是,在收到随机数后,如何确认向量中尚未保留该值。我的代码示例 int seed() { // Produce computers numbers int seed; int x; cout << "Please enter any Integer!\n"; cin >> x; seed =

我试图创建一个包含四个不同整数的向量,范围为0:9。每次运行程序时,我都使用seed和randint()函数获取不同的随机数。我遇到的问题是,在收到随机数后,如何确认向量中尚未保留该值。我的代码示例

int seed()
{
    // Produce computers numbers
    int seed;
    int x;
    cout << "Please enter any Integer!\n";
    cin >> x;
    seed = randint(x) % 10;
    return seed;
}

int main ()
{
    while(keys.size() !=4)
    {
        key = seed();
    }
}
int seed()
{
//生产计算机号码
int种子;
int x;
cout>x;
种子=randint(x)%10;
返回种子;
}
int main()
{
while(key.size()!=4)
{
键=种子();
}
}
正如您所看到的,int key现在保存随机数,但我不想使用key。向后推(key),直到我确认key与向量中当前保存的任何其他数唯一为止

使用来存储数字怎么样?只要大小小于四(例如,在循环中),就可以添加到它


如果在向量中需要它,则可以在生成集合中的数字后创建向量。

您可以使用
下限
找到正确的插入点,以保持向量的顺序。然后,在插入之前,您可以使用
binary\u search
判断向量中是否有任何元素。

您要查找的是

创建一个元素数组
{0,1,2,3,4,5,6,7,8,9}
. 然后遍历每个元素,并将其与范围内的随机索引交换

std::vector<int> GenerateRandomUniqueNumbers(int len)
{
    if(len > 10) // Early exit
        return std::vector<int>();

    std::vector<int> range(10);
    std::iota(range.begin(), range.end(), 0); 
    // or just
    // std::vector<int> range = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

    for(int i = 0; i < len; ++i) 
    {
        int j = random() % range.size();
        std::swap(range[i], range[j]);
    }
    range.resize(len);
    return range;
}
std::向量生成器域唯一数(int len)
{
如果(len>10)//提前退出
返回std::vector();
std::矢量范围(10);
std::iota(range.begin(),range.end(),0);
//或者只是
//向量范围={0,1,2,3,4,5,6,7,8,9};
对于(int i=0;i
然后获取数组的前四个元素
范围


您可以将for循环限制为仅四次迭代。

为什么不制作一个包含0-9个元素的向量,将其洗牌,然后获取前4个元素?您可能需要。看看什么是可用的,什么是必须提供的。老实说,因为我还没有学会如何洗牌向量。这是我正在读的一本书中的一个练习,他们希望你使用randint()。此外,我还需要知道如何操作,因为程序的另一部分应该让用户输入自己的四个数字,以尝试猜测我的四个数字。除此之外,他们还必须按照正确的顺序猜数字。所以我需要在整个程序中再次进行这样的测试。我现在很困惑。我相信你们都是对的,std::还没有被教过,所以我必须做一些研究。我确信他们希望我使用到目前为止所涵盖的内容,但这给了我另一种研究的方式,这种方式从来都不坏。谢谢大家@如果你用的是向量,那就是。大多数都有一个类似的接口(设置if成员函数),因此如果你能使用其中一个,那么学习另一个就不需要太多工作。或者只需使用std::shuffle。我已经为循环添加了限制,这样它就可以在向量结束之前停止。谢谢,这非常有用!