On May 13, 1:57 am, Paavo Helde <nob...@[EMAIL PROTECTED]
> wrote:
> utab <umut.ta...@[EMAIL PROTECTED]
> wrote in news:50129083-18fd-4099-9ba7-
> 586bb9df7...@[EMAIL PROTECTED]
> > I was experimenting with a template taking two iterators for
> > the range of a vector.(Perhaps, it is sth simple and I am
> > missing it because it is a late hour.) I ran into problems
> > in the compile phase , the code is below:
[...]
> .. or throw away the redundant template parameter:
> template <class Ran>
> typename Ran::value_type median(Ran b, Ran e)
There's no guarantee that Ran has a typedef for value_type (and
there have definitely been implementations of the standard
library where it didn't for std::vector<>).
This should be:
template< typename RandomAccessIterator >
typename std::iterator_traits< RandomAccessIterator >::value_type
median( RandomAccessIterator begin, RandomAccessIterator end )
> {
> typedef typename vector<Ran::value_type>::size_type vec_sz;
And here, even worse, since you're tying yourself to
std::vector. (Even as it stands, you need an additional
typename in the template argument.) Also, the difference
between to random access iterators is a difference_type, not a
size_type. So it should be:
typedef typename std::iterator_traits< RandomAccessIterator >
::difference_type SequenceSize ;
> vec_sz size =3D (e-b)/sizeof(Ran::value_type);
And of course, you don't want the division.
--
James Kanze (GABI Software) email:james.kanze@[EMAIL PROTECTED]
en informatique orient=E9e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S=E9mard, 78210 St.-Cyr-l'=C9cole, France, +33 (0)1 30 23 00 34


|