/*
 *  Stack operations
 *
 */

template <class T, class A = allocator<T> > class vector {
public:
    // ...
    // stack operations:

    void push_back(const T& x); // add to end
    void pop_back();            // remove last element
        // ...
};


/*
 *  Usage of stack operations
 *
 */

void f(vector<char>& s)
{
    s.push_back('a');
    s.push_back('b');
    s.push_back('c');
    s.pop_back();
    if (s[s.size()-1] != 'b') error("impossible!");
    s.pop_back();
    if (s.back() != 'a') error("should never happen!");
}       



vector<Point> cities;

void add_points(Point sentinel)
{
    Point buf;

    while (cin >> buf) {
        if (buf == sentinel) return;
        // check new point
        cities.push_back(buf);
    }
}



void f()
{
    vector<int> v;
    v.pop_back();       // undefined effect: the state of v becomes undefined
    v.push_back(7);     // undefined effect (the state of v is undefined), probably bad
}