/*
* List operations
*
*/
template <class T, class A = allocator<T> > class vector {
public:
// ...
// list operations:
iterator insert(iterator pos, const T& x); // add x before pos
void insert(iterator pos, size_type n, const T& x); // add n copies of x before pos
template <class In> // In must be an input iterator
void insert(iterator pos, In first, In last); // insert elements from sequence
iterator erase(iterator pos); // remove element at pos
iterator erase(iterator first, iterator last); // erase sequence
void clear(); // erase all elements
// ...
};
/*
* Usage of list operations
*
*/
void duplicate_elements(vector<string>& f)
{
for(vector<string>::iterator p = f.begin(); p!=f.end(); ++p) f.insert(p,*p); // No!
}
template<class C> void f(C& c)
{
c.erase(c.begin()+7); // ok (if c's iterators support + )
c.erase(&c[7]); // not general
c.erase(c+7); // error: adding 7 to a container makes no sense
c.erase(c.back()); // error: c.back() is a reference, not an iterator
c.erase(c.end()-2); // ok (second to last element)
c.erase(c.rbegin()+2); // error: vector::reverse_iterator and vector::iterator
// are different types
c.erase((c.rbegin()+2).base()); // obscure, but ok
}