私のプログラムは整数のSTLベクトルを操作しますが、時々、それらに関するいくつかの統計を計算する必要があります。したがって、GSL関数を使用します。STLベクトルがGSLベクトルにコピーされるのを避けるために、次のコードのように、GSLベクトルビューを作成し、それをGSL関数に渡します。
#include <iostream>
#include <vector>
#include <gsl/gsl_vector.h>
#include <gsl/gsl_statistics.h>
using namespace std;
int main( int argc, char* argv[] )
{
vector<int> stl_v;
for( int i=0; i<5; ++i )
stl_v.push_back( i );
gsl_vector_int_const_view gsl_v = gsl_vector_int_const_view_array( &stl_v[0], stl_v.size() );
for( int i=0; i<stl_v.size(); ++i )
cout << "gsl_v_" << i << "=" << gsl_vector_int_get( &gsl_v.vector, i ) << endl;
cout << "mean=" << gsl_stats_mean( (double*) gsl_v.vector.data, 1, stl_v.size() ) << endl;
}
コンパイルされると(gcc -lstdc ++ -lgsl -lgslcblas test.cpp)、このコードは次のように出力します。
gsl_v_0=0
gsl_v_1=1
gsl_v_2=2
gsl_v_3=3
gsl_v_4=4
mean=5.73266e-310
ベクトルビューは適切に作成されていますが、平均が間違っている理由がわかりません(10/5 = 2に等しいはずです)。何か案が?前もって感謝します。