私は、モンテカルロシミュレーションで重み付けサンプリングを行うテンプレート関数を作成しようとしました。それは以下の通りです。 input_dataは、静的に割り当てられた配列(すなわち、データ[33])、動的に割り当てられた配列、またはベクトルのいずれかです。STLの使用テンプレート関数内でソートする?
template <class myType>
int init_roulette_calcs(myType &input_data, int inputlength, int *(&output_cdf), int highclassix, int weight)
{
sort(input_data, input_data + inputlength); //where the error occurs
//other code:
output_cdf = new int [inputlength];
int k = 1;
for (int i = 0; i < inputlength; i++)
{
output_cdf[i] = k;
if (i+1 < highclassix) k++;
else k += weight;
}
return output_cdf[inputlength-1];
}
テンプレート関数がsortの呼び出しで引数を推定できなかったため、コードはコンパイルされません。これは愚かな質問かもしれませんが、ソートが正しく機能するようにするためには何をする必要がありますか?
Error 4 error C2784: 'std::_Vb_iterator<_Alloc> std::operator
+(_Alloc::difference_type,std::_Vb_iterator<_Alloc>)' : could not deduce template argument for
'std::_Vb_iterator<_Alloc>' from 'int' j:\rdm\lrgv_2011-07-21\lrgv_src\lrgv.h 398
ご協力いただきありがとうございます。
ありがとうございます。私はベクトルを別々に扱わなければならないでしょう。 – Joe
STLイテレータを未処理のポインタとして扱うべきではありません。また、実装によってはコードが壊れることもあります。 –
私はそのステートメントに同意します - ベクトル実装は、標準で連続したメモリを使用するものとして定義されています。したがって、ポインタの算術演算で問題に対処するべきではありません。しかし、STLコンテナの一般的な使い方は、特にイテレータを使用中にコンテナ操作によって無効にすることができるため、一般的にはあまり良いことではありません。 –