STL初心者です。ベクトル反復子をパラメーターとして取るルーチンを作成しようとしています。つまり、vector.begin() と vector.end() を渡す必要があります。コードが機能しない理由がわかりません:
template<typename T, typename Iter> void VectorQuickSort(Iter itL, Iter itR){
const int nSize = (itR - itL);
if(nSize<2) return;
Iter iBeginning(itL), iEnd(itR);
--itR;
T tPivot = *( itL + (nSize/2) );
while( itL <= itR ){
while( *itL < tPivot ) ++itL;
while( *itR > tPivot ) --itR;
if( itL <= itR ){
std::iter_swap(itL,itR);
++itL;
--itR;
}
}
VectorQuickSort(iBeginning,itR);
VectorQuickSort(itL,iEnd);
}
そして、main()
私は単に を呼び出しますVectorQuickSort(vInput.begin(),vInput.end());
。コンパイラが教えてくれerror: no instance of function template "VectorQuickSort" matches the argument list
ます。どんな助けでも感謝します:)
編集:上記のコードを使用しようとしている可能性のある人への警告として:提供された回答を適用しても、ソートアルゴリズム自体にまだ問題があります。適切に動作する C バージョンを STL スタイルに変換できません。