#ifndef dplyr_tools_pointer_vector_H #define dplyr_tools_pointer_vector_H namespace dplyr { template class pointer_vector { public: typedef typename std::vector Vector; typedef typename Vector::reference reference; typedef typename Vector::const_reference const_reference; typedef typename Vector::size_type size_type; typedef typename Vector::value_type value_type; typedef typename Vector::iterator iterator; pointer_vector() : data() {} pointer_vector(size_type n) : data(n) {} inline ~pointer_vector() { typedef typename Vector::size_type size_type; size_type n = data.size(); // shortcut to avoid decreasing iterator past begin() if (n == 0) return; iterator it = data.end(); --it; for (size_type i = 0; i < n; --it, i++) delete *it; } inline reference operator[](size_type i) { return data[i]; } inline const_reference operator[](size_type i) const { return data[i]; } inline void push_back(const value_type& value) { data.push_back(value); } inline size_type size() const { return data.size(); } private: Vector data; pointer_vector(const pointer_vector&); }; } #endif