运行代码的以下部分时,我继续收到此错误vector subscript out of range
,在此行interval.push_back (peaks_position_vector[n+1]-peaks_position_vector[n]);
我认为问题在于胜利者的大小,因为即时通讯超过了向量大小。我试图用100初始化n以测试它并减少n。没有发生错误。有人可以帮助我如何根据我的要求进行修复吗?提前致谢。 (请随意询问代码的其他部分,我只提到了这一部分,因为这仅是发生错误的地方。)
double ECG::compute_heart_rate(vector<double>& peaks_position_vector)
{
const int s = 60; // 'const' for good practice such that the variable s never changes in execution
vector<double> interval;
// compute pair-wise differences
for (unsigned int n = 0; n < peaks_position_vector.size()-1; n++)
{
interval.push_back (peaks_position_vector[n+1]-peaks_position_vector[n]);
// create heart rate vector
vector<double> heart_rate;
for (unsigned int j = 0; j < interval.size()-1; j++)
{
double hh = s/interval[j];
heart_rate.push_back(hh);
// calculate mean heart rate
double mean_heart_rate, return_value = 0;
int x= 0;
for (unsigned int i=0; i < heart_rate.size(); i++)
{
return_value += heart_rate[i];
x++;
mean_heart_rate = return_value / x;
}
}
}
} // end of code block
答案 0 :(得分:0)
我猜是这样
n < peaks_position_vector.size()-1
应该是
n + 1 < peaks_position_vector.size()
假设peaks_position_vector.size()
等于零,在peaks_position_vector.size()-1
返回无符号值的情况下,您认为size()
的计算结果如何?零是可能的最小无符号值?
答案 1 :(得分:0)
您提到的实现存在一个除以零的错误。在执行此操作时,您将向量输入视为{4,4,4,4,5,5,5,5,5}
interval.push_back (peaks_position_vector[n+1]-peaks_position_vector[n]);
....
....
double hh = s/interval[j];
heart_rate.push_back(hh)
...
...
return_value += heart_rate[i];
如您所见,这会使return_value
陷入混乱(应具有inf值)。当然,@ john在前面的答案中提到的内容也适用。