/* * 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 }