C++でvectorと配列の両方で動くmedian関数をつくっているのですが

template<class T> double median(T hw){
int size=sizeof(hw)/sizeof(hw[0]);

if(size==0){
throw domain_error("hwの中身がない");
}

sort(&hw[0],&hw[size-1],my_compare2);
int mid = size/2;
return size%2==0 ? (hw[mid]+hw[mid-1])/2 : hw[mid];
}

のようにtemplateを利用していますがsizeofで配列の要素の数は求められるのですが
vectorの要素の数が求められなくて困っています。
両方の要素数をもとめる方法を教えてください。