What is the general rule when using Text, String or Name?

I’ve got a question:
Why should I use FText/FString/FName instead of good old std::string.
Same thing for TArray and std::vector.