I use vectors a lot in my programming, and generally to traverse a vector for an existing value I use std::find as in:
std::vector<int> foo;
std::vector<int>::iterator pos( std::find( foo.begin(), foo.end(), bar );
This is a real bore. So I went to deriving a template from std::vector to provide a find method:
template<class T>
class foovector : public std::vector<T>
{
public:
typename std::vector<T>::iterator find( const T& value )
{
return std::find( this->begin(), this->end(), value );
}
};
And so now I can do find's more naturally:
foovector<int> foo;
foovector<int>::iterator pos( foo.find( bar ) );
My question is that this seems such a natural and obvious extension to vector, so why isn't it part of the STL or even boost? I feel like I'm missing some Arcane Knowledge here.
What about you do what you want to achieve and still not go into the dubious path of inheriting from std::vector
define a freestanding function
template <typename T>
typename std::vector<T>::const_iterator find( const std::vector<T>& v, const T& value )
{
return std::find( v.begin(), v.end(), value );
}
you can put this into namespace std(which, technically speaking is not allowed), or in some other namespace (with the tradeoff that it won't be found by ADL, so you will need to qualify it). HTH
P.S. by the way you could generalize this for all containers
template <typename Container, typename T>
typename Container::const_iterator find( const Container& c, const T& value )
{
return std::find( c.begin(), c.end(), value );
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With