#include #include using namespace std; template class Set { public: class Iterator; void add(T v); void remove(T v); Iterator begin(); Iterator end(); private: vector data; }; template class Set::Iterator { public: Iterator(int index, Set *s); T get(); void next(); bool equals(Iterator s); private: int index; Set *values; }; template Set::Iterator::Iterator(int i, Set *s) { index = i; values = s; } template T Set::Iterator::get() { return (*values).data[index]; } template void Set::Iterator::next() { index++; } template bool Set::Iterator::equals(Iterator s) { return (values == s.values) && (index == s.index); } template Set::Iterator Set::begin() { return Iterator(0, this); } template Set::Iterator Set::end() { return Iterator(data.size(), this); } template void Set::add(T v) { Iterator p = begin(); Iterator q = end(); while (! p.equals(q)) { if (p.get() == v) return; p.next(); } data.push_back(v); } int main() { Set a; a.add(7); a.add(4); a.add(7); a.add(5); Set::Iterator p = a.begin(); Set::Iterator q = a.end(); while (! p.equals(q)) { cout << "value " << p.get() << "\n"; p.next(); } return 0; }