#ifndef KONTEN_H #define KONTEN_H #include using namespace std; template class Konten { enum { ssize = 100 }; T stack[ssize]; int top; public: Konten() : top(0) {} void push(T i) { assert(top < ssize); stack[top++] = i; }; T pop() { assert(top > 0); return stack[--top]; }; int rozmiar() { return top; }; class iterator { Konten& s; int index; public: iterator(Konten& is) : s(is), index(0) {}; iterator(Konten& is, bool) : s(is), index(s.top) {}; T operator++() { // Prefix assert(index < s.top); return s.stack[++index]; }; T operator++(int) { // Postfix assert(index < s.top); return s.stack[index++]; }; T& operator*() const { return s.stack[index];}; iterator& operator=(const iterator& rv) { if (&s == &(rv.s)) // kopiowanie tylko dla iteratorów tego samego kontenera index = rv.index; return *this; } bool operator!=(const iterator& rv) { if (index != rv.index) { return true; } return false; } }; iterator begin() { return iterator(*this); }; iterator end() { return iterator(*this, true);}; friend class iterator; }; template void Roznicuj(Iter i1, Iter i2, Iter i3) { while (i1 != i2) { *i1 = *i1 - *i3; i1++; i3++; } } template void DoKwadratu(Iter i1, Iter i2) { while (i1 != i2) { *i1 = *i1 * *i1; i1++; } } template void Sumuj(Iter i1, Iter i2, T& a) { while (i1 != i2) { a = a + *i1; i1++; } } template void Wypisz(Iter i1, Iter i2) { while (i1 != i2) { cout << *i1 << endl; i1++; } } #endif