そのため、ベクトルに含まれるいくつかの double を合計する必要があります。ここで、私の VECTOR は実際にはオブジェクトへのポインターです。
initVal に int を指定して Accumulate を使用すると、-3.3695e+008 のような答えが返されますが、そこに double を入れると、「'+' : ポインターの追加には整数オペランドが必要です」というメッセージが表示されます。私はそれを修正するために多くの方法を試しました。蓄積アルゴリズムで渡されるポインターについて考え、逆参照イテレーターについていくつか検索しましたが、問題の解決策にたどり着くことができませんでした (期限が切れていないためだと思います) 蓄積:
void calcDMean(){
dMean= 0.0 ;
vector<CData*> :: iterator it = m_vectorData.begin();
int n = m_vectorData.size();
// dMean = accumulate(m_vectorData.begin(), m_vectorData.end(), 0.0);
dMean = accumulate(it,m_vectorData.end(),0.0);
dMean = dMean/n;
}
そして、残りのコードの一部 (データは、2 番目のクラスの「ファイル コンストラクター」を介して渡されます。
class CData {
int m_iTimeID;
double m_dData;
public:
CData (){
m_iTimeID = 0;
m_dData = 0;
}
CData (const CData& obekt){ //Copy
m_iTimeID=obekt.m_iTimeID;
m_dData=obekt.m_dData;
}
int getID() const{ //GET ID
return m_iTimeID;}
double getData() const { //GET DATA
return m_dData;}
double operator+(CData &obekt){
return (m_dData + obekt.m_dData);
} ;
double operator+(double b){
return (m_dData + b);
} ;
};
class CCalc3SigmaControl {
vector<CData*> m_vectorData;
double sigmaUp;
double sigmaDown;
double dMean;