Заголовок <string>
включает определение класса string
(примечание: #include "string"
означает включение файла string
в текущий каталог, поэтому вам следует использовать угловые скобки вместо "
для включений системы .)
Однако iostream
уже включает string
(например, для объявления operator<<
, который работает для std::string
), поэтому вам не нужно включать его в этом случае.
В любом случае, рекомендуется включать заголовки, которые вам просто необходимы. Это делает ваш код более переносимым и более явным в случае, если вы копируете этот код в другой контекст, скажем, который не включает iostream
в качестве предыдущего включения. Также обратите внимание, что никогда не указывается, что, например, включение iostream
сделает доступным std::string
, поэтому, строго говоря, вы должны включить string
, чтобы использовать std::string
.