#ifndef SUMVEC_H
#define SUMVEC_H

#include "Vec.h"

using std::max;

template <class T> class sumVec: public Vec<T> {
public:
	typedef T* iterator;
	typedef const T* const_iterator;
	typedef size_t size_type;
	typedef T value_type;
	typedef T& reference;
	typedef const T& const_reference;
	
	sumVec(): sum(0) { }
	explicit sumVec(size_type n, const T& t = T()) 
	{ Vec<T>::create(n, t);
		sum=n*t; }

	sumVec(const sumVec& v);
	sumVec& operator=(const sumVec&);	
	~sumVec() { Vec<T>::uncreate(); }
	void push_back(const T& t) {
		Vec<T>::push_back(t); 
		sum+=t;
	}
	void show() const {Vec<T>::show(); std::cout<<", sum= "<<sum;}
	void clear(){Vec<T>::clear();sum=0; }


protected:
	T sum;
	sumVec<T>* clone() const {return new sumVec<T>(*this);}
	
};

template <class T>
sumVec<T>::sumVec(const sumVec& v)
{
	create(v.begin(), v.end());
	sum=v.sum;
}

template <class T>
sumVec<T>& sumVec<T>::operator=(const sumVec& rhs)
{	
	if (&rhs != this) {
		Vec<T>::uncreate();
		create(rhs.begin(), rhs.end());
		sum=rhs.sum;
	}
	return *this;
}
#endif
