【问题标题】:An issue when looping with while使用 while 循环时的问题
【发布时间】:2013-08-30 06:53:08
【问题描述】:

我有一个向量QVector<float> dist;,我在其中保持所有维度的欧几里得距离。我保持尺寸如下:

QHash<int, QVector<float> > hash; 

其中int 是键,值再次保存在QVector&lt;float&gt; 中。 当我尝试填写dist 时的代码如下:

for(int i = 0; i < t; i++)
    {
        for(int j = 1; j < t; j++)
        {
            while( j <= i)
                j++;
            dist.push_back(qPow((a[i] - hash[i].at(point)), 2) + qPow((a[j] - hash[j].at(point)), 2));
            qDebug() << "Euclidean distance for Dim" << i << "and Dim" << j << " = " << dist[i];
        }
    }

循环按预期计算所有内容,但在之后崩溃并出现内存错误:

QVector::at "index out of range" 中的 ASSERT 失败...

当我删除while 循环(计算将是错误的)时,应用程序不再崩溃。

【问题讨论】:

  • while 循环后 j 将等于 t。我怀疑 t 是哈希中的有效索引
  • 什么是apoint 是什么?

标签: c++ qt loops while-loop


【解决方案1】:

由于 i

可能是正确的放置

while( j < i)

而不是

while( j <= i)

【讨论】:

  • 但是如果 i=j case 也不适合我怎么办?
  • 迈克,关于“i=j”的问题的答案取决于你的算法。现在我们可以看到,有一个错误(有时 j==t,出了什么问题)。请说明您的算法必须如何工作。
  • 我有一个散列,其中键是维度 - hash[0]...h[3] - Dim_1...Dim_4,值是保存 w.r.t 维度坐标的向量。例如- 对于维度 1:h[0] = {1, 2},对于维度 2:h[1] = {2, 1},对于维度 3:h[2] = {1.4, 2.3},对于维度 4: h[3] = {0.5, 3}。我希望循环计算 a[i] 元素之间的欧几里得距离,其中 a 也是使用以下代码预定义的向量: for(int j = 0; j
  • Mike,所以你不需要访问 a[t]。据我了解您的问题,您必须更正第一个“for”的限制。只需将“for(int i = 0;i t-1;i++)”放入您的程序中即可。
猜你喜欢
  • 2011-06-19
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
  • 1970-01-01
  • 2014-05-22
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
相关资源
最近更新 更多