Cita: cstdlib si lo necesito por que es necesaria para rand()
Ups, se me pasó, tienes razón.
Cita: por que es necesario include string? ami me funciona string sin poner eso...
Lo mejor que puedes hacer es incluir todas las librerias que estés utilizando. El que funcione para este caso sin incluir <string> depende de la implementación del compilador (supongo utilizas gcc-g++), en este caso lo que se puede deducir es que la implementación de GNU debe incluir <string> en algún lugar a partir del include <iostream>, pero eso no tiene que ser verdad para la implementación de cualquier otro compilador, por ejemplo, el mismo código no compila con MSVC++ si no haces el include de <string>.