Здравствуйте, пишу рандомайзер, который выводит из вектора интов число k, а затем удаляет его из вектора

Пытался сначала работать с итераторами, но потом переделал через std::remove из библиотеки с алгоритмами удаление конкретного числа из вектора. Но теперь у меня получается, что всегда выводится последовательность {n,n-1,...,1}

int main()
{
    srand(time(NULL));
    rand();
    int toReturn;
    std::cout << "Enter the number of tickets: ";
    std::cin >> toReturn;
    std::cout << std::endl;
    std::vector<int> nums;

    for (int i = 1; i <= toReturn; ++i)
    {
        nums.push_back(i);
    }

    int choice=0;
    bool checked=0;
    while (nums.size() > 0)
    {
        bool inVector=0;
        choice = rand() % toReturn + 1;

        while(inVector == 0)
        {
            choice = rand() % toReturn + 1;

            for (int i = 0; i < nums.size(); ++i)
            {
                if (choice == nums[i])
                {
                    inVector = 1;
                }
                else
                {
                    inVector = 0;
                }
            }
        }
        std::cout << "Why not check the ticket " << choice << std::endl;
        std::cout << "Did u do it right?" << std::endl;
        std::cin >> checked;
        if (checked)
        {
            nums.erase(std::remove(nums.begin(), nums.end(), choice), nums.end());
        }

        else
        {
            continue;
        }
    }
    if (nums.size() == 0)
    {
        std::cout << "You checked all tickets!!!";
    }
    return 0;
}

Также буду рад, если посоветуете какую-нибудь оптимизацию кода

update: Пусть у нас есть вектор (1,2,3,4,5), алгоритм должен выбрать рандомное число допустим 4, вывести его нам в таком формате: "Проверим билет 4", а затем удалить его, останется вектор (1,2,3,5), ну аналогично ещё 4 рандомных числа удалится, пока не останется нулевой вектор, но моя программа не делает выбор числа рандомным, и всегда выдаёт сначала удаляет 5, затем 4 и так до 1.

Да, спасибо увидел проблему, но полностью переработал код при помощи random_reshuffle таким образом:

#include <iostream>
#include <vector>
#include <algorithm>
#include <ctime>
#include <random>
int main()
{

    int toReturn;
    std::cout << "Enter the number of tickets: ";
    std::cin >> toReturn;
    std::cout << std::endl;
    std::vector<int> nums;


    for (int i = 1; i <= toReturn; ++i)
    {
        nums.push_back(i);
    }
    std::random_device rd;
    std::mt19937 g(rd());
    int choice = 0;
    std::shuffle(nums.begin(), nums.end(), g);

    while (nums.size() > 0)
    {
        bool checked = 0;
        choice = 0;
        std::cout << "Why not to check " << nums[choice];
        std::cout << std::endl << "Did you do it right?";
        std::cin >> checked;
        if (checked == 1)
        {
            nums.erase(std::remove(nums.begin(), nums.end(), nums[choice]), nums.end());
        }
        choice++;
    }


    std::cout << "You checked all tickets!!!";
    return 0;
}

Ответы (0 шт):