У меня под рукой нет хорошей книги по C ++, и Google не выдает ничего полезного.
Как это работает? Концептуально, что здесь происходит? Технически, является ли прототип для оператора << () предопределенным, как его автор знал, как записать его, чтобы << был перегружен для вывода значений контейнера? </p>
Куда мне обратиться, чтобы посмотреть на operator<<()
, чтобы я мог его перегрузить?
Также для ввода вам нужны начальное и конечное "место" c.begin()
, c.end()
... но для вывода вам нужно одно "место" ostream_iterator
. Это кажется немного асимметричным.
template <typename Container>
std::ostream& operator<<(std::ostream& os, const Container& c)
{
std::copy(c.begin(), c.end(),
std::ostream_iterator<typename Container::value_type>(os, " "));
return os;
}