33 T value(int index,T def={}) const { if (index<0 or index>=size()) return def; return this->at(index); }
34void insert(int index,const T &val) { this->base::insert(this->begin()+index,val); }
35bool contains(const T &val) const { auto i = std::find(this->begin(),this->end(),val); return i!=this->end(); }
36bool isEmpty() const { return size()==0; }
37int indexOf(const T &val) const { auto i = std::find(this->begin(),this->end(),val); if (i==this->end()) return -1; returnto<int>(i-this->begin()); }
38bool removeOne(const T &val) { auto i = std::find(this->begin(),this->end(),val); if (i==this->end()) returnfalse; this->erase(i); returntrue; }
39void removeAt(int i) { auto it = this->begin() + i; this->erase(it); }
40void removeAll(const T &t) { auto iend = std::remove(this->begin(),this->end(),t); this->erase(iend,this->end()); }
73void push_front(const T &t) { this->insert(this->begin(),t); }
74const T &last() const { return this->back(); }
75 T &last() { return this->back(); }
76int indexOf(const T &t,int from=0) const { auto s = this->begin()+from; auto f = std::find(s,this->end(),t); if (f==this->end()) return -1; returnto<int>(f-this->begin()); }