// see http://stackoverflow.com/questions/3496982/printing-lists-with-commas-c/3497021#3497021 // infix_iterator.h // // Lifted from Jerry Coffin's 's prefix_ostream_iterator #if !defined(INFIX_ITERATOR_H_) #define INFIX_ITERATOR_H_ #include #include template > class infix_ostream_iterator : public std::iterator { std::basic_ostream *os; charT const* delimiter; bool first_elem; public: typedef charT char_type; typedef traits traits_type; typedef std::basic_ostream ostream_type; infix_ostream_iterator(ostream_type& s) : os(&s),delimiter(0), first_elem(true) {} infix_ostream_iterator(ostream_type& s, charT const *d) : os(&s),delimiter(d), first_elem(true) {} infix_ostream_iterator& operator=(T const &item) { // Here's the only real change from ostream_iterator: // Normally, the '*os << item;' would come before the 'if'. if (!first_elem && delimiter != 0) *os << delimiter; *os << item; first_elem = false; return *this; } infix_ostream_iterator &operator*() { return *this; } infix_ostream_iterator &operator++() { return *this; } infix_ostream_iterator &operator++(int) { return *this; } }; #endif