#pragma once #include namespace hack::iterators { template class sequence_ostream_iterator { using iterator_category = std::output_iterator_tag; using traits = std::char_traits; using ostream_type = std::basic_ostream; private: std::basic_ostream* os_; std::string devider_ = ", "; std::size_t size_; public: sequence_ostream_iterator(std::size_t size, ostream_type& os) : os_ { &os }, size_ { size } { } auto& operator=(T const& item) { --size_; *os_ << item << (size_ != 0 ? devider_ : ""); return *this; } auto& operator*() { return *this; } auto& operator++() { return *this; } }; }