template error with iterator
Dear all,
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:
#include <iostream>
#include <algorithm>
#include <stdexcept>
#include <vector>
using std::domain_error;
using std::sort;
using std::vector;
template <class T, class Ran>
T median(Ran b, Ran e)
{
typedef typename vector<T>::size_type vec_sz;
vec_sz size = (e-b)/sizeof(T);
if (size == 0)
throw domain_error("median of an empty vector");
sort(b, e);
vec_sz mid = size/2;
return size % 2 == 0 ? (b[mid] + b[mid-1]) / 2 : b[mid];
}
int main()
{
vector<double> vec;
for(int i=0;i!=10;++i)
vec.push_back(i);
std::cout << median(vec.begin(), vec.end()) << std::endl;
return 0;
}
I get
83.cc: In function 'int main()':
83.cc:38: error: no matching function for call to
'median(__gnu_cxx::__normal_iterator<double*, std::vector<double,
std::allocator<double> > >, __gnu_cxx::__normal_iterator<double*,
std::vector<double, std::allocator<double> > >)'
I am supplying the median function with iterators by using the begin
and
end member functions of the vector. However, I get a type mismatch
error
on iterators I guess. Could you clarify the problem for me?
Rgds,
--
Umut