//--------------------------------------------------------------------------- /* 範囲チェック付きベクタ ass_vector Ver.1.1 operator[]などのメンバ関数で、添え字やイテレータの範囲チェックを行う std::vectorです。範囲チェックはassertで行うため、NDEBUGをdefineすれば 無効になります。 Gimite 市川 */ //--------------------------------------------------------------------------- #ifndef GIMITE_ass_vectorH #define GIMITE_ass_vectorH //--------------------------------------------------------------------------- #include #include //--------------------------------------------------------------------------- namespace gimite{ //--------------------------------------------------------------------------- template > class ass_vector: public std::vector { typedef std::vector base_t; public: explicit ass_vector(const Allocator& alloc= Allocator()): base_t(alloc){} explicit ass_vector (base_t::size_type size, const T& val= T(), const Allocator& alloc= Allocator()) : base_t(size, val, alloc){} template ass_vector (InputIterator first, InputIterator last, const Allocator& alloc= Allocator ()) : base_t(first, last, alloc){} base_t::reference operator[](base_t::size_type pos){ assert(pos>=0 && pos=0 && pos0); return base_t::back(); } base_t::const_reference back()const{ assert(size()>0); return base_t::back(); } base_t::iterator erase(base_t::iterator pos){ assert(pos>=begin() && pos0); return base_t::front(); } base_t::const_reference front()const{ assert(size()>0); return base_t::front(); } base_t::iterator insert(base_t::iterator pos, const T& x){ assert(pos>=begin() && pos<=end()); return base_t::insert(pos, x); } void insert(base_t::iterator pos, base_t::size_type n, const T& x){ assert(pos>=begin() && pos<=end()); base_t::insert(pos, n, x); } template void insert(base_t::iterator pos, InputIterator first, InputIterator last){ assert(pos>=begin() && pos<=end()); base_t::insert(pos, first, last); } void pop_back(){ assert(size()>0); base_t::pop_back(); } }; //--------------------------------------------------------------------------- }//namespace gimite //--------------------------------------------------------------------------- #endif