#include class shift_vector : public std::vector { public: shift_vector() : std::vector() {} void shift_left() { if (size() == 0) { return; } /* Join consecutive equal numbers. */ for (unsigned int i = 1; i < size(); ++i) { if (at(i-1) == at(i)) { at(i-1) += at(i); at(i) = 0; } } /* Remove empty positions. */ unsigned int d = 0; for (unsigned int i = 0; i < size(); ++i) { if (at(i) != 0) at(d++) = at(i); } /* Make remainder empty. */ for ( ; d < size(); ++d) { at(d) = 0; } } private: }; #include #include using namespace std; int main() { shift_vector v; istream_iterator begin(cin); istream_iterator end; copy(begin, end, back_inserter(v)); ostream_iterator begin_out(cout, " "); copy(v.begin(), v.end(), begin_out); for (unsigned int i = 0; i < v.size(); ++i) { v.shift_left(); cout << endl; copy(v.begin(), v.end(), begin_out); } cout << endl; return 0; }