#include <iostream>
#include <vector>
#include <algorithm>
#include <sstream>
#include <iterator>
#include <initializer_list>
template<typename T>
class VecExt : public std::vector<T> {
public:
VecExt(std::initializer_list<T> l) : std::vector<T>(l) {}
std::string to_string() const {
std::stringstream temp;
std::copy(this->begin(), this->end(), std::ostream_iterator<T>(temp, " "));
return temp.str();
}
friend std::ostream &operator<<(std::ostream& os, const VecExt<T>& m) {
std::copy(m.begin(), m.end(), std::ostream_iterator<T>(os, " "));
return os;
}
};
int main() {
const auto v = VecExt<int>{1,3,5,4};
std::cout << v.to_string() << std::endl;
std::cout << v;
}