通过指针向量累积

时间:2014-03-28 12:45:26

标签: c++ pointers vector accumulate

所以我需要使用accumulate对向量中的一些双精度求和,其中我的VECTOR实际上是指向对象的指针。

现在当我对initVal使用一个int的累积时,它运行给我一个像-3.3695e + 008这样的答案但是当我把一个双重放在那里时我得到了''+':指针添加需要整数操作数“。我尝试了很多方法来修复它,思考它在累积algorythm中传递的指针,我搜索了一些关于解除引用迭代器的东西,但是我无法解决我的问题(因为我猜不到) 积累:

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;  

2 个答案:

答案 0 :(得分:3)

你遇到的问题是你的vector存储指针,所以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(); }
);

答案 1 :(得分:1)

使用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();
 }