gpt4 book ai didi

c++ - 通过指针 vector 累加

转载 作者:行者123 更新时间:2023-11-27 23:07:16 27 4
gpt4 key购买 nike

所以我需要使用 accumulate 对 vector 中的一些 double 值求和,其中我的 VECTOR 实际上是指向对象的指针。

现在,当我将 accumulate 与 int 一起用于 initVal 时,它运行时会给出类似 -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;

最佳答案

你的问题是你的 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(); }
);

关于c++ - 通过指针 vector 累加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22713278/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com