The 32-bit Mersenne Twistor algorithm provides a high-quality random number generator suitable for scientific applications (especially Monte Carlo). Nearby elements of the sequence it generates are very weakly correlated; all the bits in each output word are roughly equally random; and the period is incredibly large. This generator is available in the C++ standard library:
Seeding the generator
If what you want is a pseudo-random sequence but one that is reproducible each time the program is run (which may be appropriate for debugging), you can simple specify a constant seed value.
However, the complete internal state of the 32-bit Mersenne Twistor random number generator is specified by 624 words. Specifying those numbers uniquely determines the current state of the generator and all its future output. The best way to seed the generator is to fill it with 624 numbers based on a high-entropy source (e.g., the random_device provided by the operating system) the first time you use it but otherwise to read in and then save the internal state at every invocation of the program: