Ragazzi non riesco a capire come funziona il generatore di numeri casuali in C++. Considerando queste due funzioni:

codice:
void rand_seed()
{
   int seed = static_cast<int>(time(0));
   srand(seed);
}

int rand_int(int a, int b)
{
   return a + rand() % (b - a + 1);
}
Qualcuno potrebbe spiegarmi per bene come funzionano e come fanno a generare numeri casuali? Ad esempio nel seguente codice utilizzando queste due funzioni vengono generati 20 numeri casuali compresi tra 1 e 100... Come funziona il tutto?

codice:
int main()
{
   rand_seed();
   vector<int> v(20);
   for (int i = 0; i < v.size(); i++)
   v[i] = rand_int(1, 100);
   print(v);

   return 0;
}