[英]Accumulate through a vector of pointers
因此,我需要使用累加求和向量中的一些双精度数,而我的VECTOR实际上是指向对象的指针。
现在,当我将intVal用于int的累加运行时,它会给我一个-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;
}
以及其余的一些代码(数据通过第二个类中的“文件构造函数”传递:
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;
您的问题是向量存储了指针 ,因此std::accumulate
将计算指针的总和。
您必须使用std::accumulate
的四参数版本,并提供自己的函数来正确执行计算,例如
dMean = std::accumulate(
m_vectorData.begin(), m_vectorData.end(), 0.0,
[] (const double acc, const CData* data) { return acc + data->getData(); }
);
使用lambda表达式。 尝试以下
void calcDMean()
{
double sum = std::accumulate( m_vectorData.begin(), m_vectorData.end(), 0.0,
[]( double acc, CData *p )
{ return ( acc + p->getData() ); } );
dMean = m_vectorData.size() == 0 ? 0.0 : sum / m_vectorData.size();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.