+
+ void push_back(const value_type& v)
+ {
+ reserve(size() + 1);
+ m_values[m_size++] = v;
+ }
+
+ void pop_back()
+ {
+ erase(end() - 1);
+ }
+
+ const value_type& at(size_type idx) const
+ {
+ wxASSERT(idx < m_size);
+ return m_values[idx];
+ }
+
+ value_type& at(size_type idx)
+ {
+ wxASSERT(idx < m_size);
+ return m_values[idx];
+ }
+
+ const value_type& operator[](size_type idx) const { return at(idx); }
+ value_type& operator[](size_type idx) { return at(idx); }
+ const value_type& front() const { return at(0); }
+ value_type& front() { return at(0); }
+ const value_type& back() const { return at(size() - 1); }
+ value_type& back() { return at(size() - 1); }
+
+ const_iterator begin() const { return m_values; }
+ iterator begin() { return m_values; }
+ const_iterator end() const { return m_values + size(); }
+ iterator end() { return m_values + size(); }
+
+ iterator insert(iterator it, const value_type& v = value_type())
+ {
+ size_t idx = it - begin();
+
+ reserve(size() + 1);
+
+ // unless we're inserting at the end, move following values out of
+ // the way:
+ for ( size_t n = m_size; n != idx; --n )
+ m_values[n] = m_values[n-1];
+
+ m_values[idx] = v;
+ m_size++;
+
+ return begin() + idx;
+ }
+
+ iterator erase(iterator it)
+ {
+ return erase(it, it + 1);
+ }
+
+ iterator erase(iterator first, iterator last)
+ {
+ if ( first == last )
+ return first;
+ wxASSERT( first < end() && last <= end() );
+
+ size_type index = first - begin();
+ size_type count = last - first;
+
+ // move the remaining values over to the freed space:
+ for ( iterator i = last; i < end(); ++i )
+ *(i - count) = *i;
+
+ // erase items behind the new end of m_values:
+ for ( iterator i = end() - count; i < end(); ++i )
+ *i = value_type();
+
+ m_size -= count;
+
+ return begin() + index;
+ }
+
+#if WXWIN_COMPATIBILITY_2_8
+ wxDEPRECATED( size_type erase(size_type n) );
+#endif // WXWIN_COMPATIBILITY_2_8
+
+private:
+ // VC6 can't compile static const int members
+ enum { ALLOC_INITIAL_SIZE = 16 };
+ enum { ALLOC_MAX_SIZE = 4096 };
+
+ void Copy(const wxVector& vb)
+ {
+ clear();
+ reserve(vb.size());
+
+ for ( const_iterator i = vb.begin(); i != vb.end(); ++i )
+ push_back(*i);
+ }
+
+private:
+ size_type m_size,
+ m_capacity;
+ value_type *m_values;