#include <iostream>
#include <algorithm>
#include "auto_vect.h"
#include "x.h"

struct DerefPrint
{
    int c;
    DerefPrint():c(0) {}
    void operator()(const int* p)
    {
        std::cout << *p << ' ';
        c+=*p;
    }
};

int main()
{
    int yourMark = 1;

    // 2-es
    auto_vect<int> vi;
    vi.push_back(new int(1));
    vi.push_back(new int(2));
    const auto_vect<int> cvi = vi;
    vi.set(1,1);
    yourMark = cvi.get(1);

    // 3-as
    vi.push_back(new int(42));
    auto_vect<int> vii;
    vii.push_back(new int(4));
    vii=vi;
    vi.pop_back();
    yourMark = cvi.size() + cvi.get(0);


    // 4-es
    auto_vect<X> vx;
    vx.push_back(new X);
    vx.push_back(new Y);
    if(vx[1]->Check())
        ++yourMark;

    // 5-ös
    if(3==std::for_each(cvi.begin(), cvi.end(), DerefPrint()).c)
    {
        ++yourMark;
        std::cout << std::endl;
    }

    std::cout << "Your mark is " << yourMark << std::endl;
    return 0;
}
