Я думаю Филиппский ответ - лучший ответ.Однако вы можете сделать свой собственный шаблон operator<<()
, который будет работать для векторов и других стандартных контейнеров, если вы хотите:
// Will write out any container that has begin(), end() and a const_iterator type
template <typename C>
std::ostream& output_container(std::ostream& os, C const& c) {
for (typename C::const_iterator i = c.begin(); i != c.end(); ++i) {
if (i != c.begin()) os << ", ";
os << *i;
}
return os;
}
// Overload operators for each container type that forward to output_container()
template <typename T>
std::ostream& operator<<(std::ostream& os, vector<T> const& c) {
return output_container(os, c);
}
template <typename T>
std::ostream& operator<<(std::ostream& os, list<T> const& c) {
return output_container(os, c);
}
Хотя вы можете просто переименовать output_container()
в operator<<()
и избавиться от-container-type operator<<()
шаблонов, тем самым перехватывая all попыток использовать <<
для типа класса, это может помешать operator<<()
шаблонам функций для других типов.