我在計算兩點之間的距離。我用C++存儲在矢量中的兩點:(0,0)和(1,1)。如何使用迭代器?
我應該得到的結果
0
1.4
1.4
0
但是,我得到的實際結果是
0
1
-1
0
我覺得有什麼毛病我在矢量使用迭代的方式。 我該如何解決這個問題?
我發佈了下面的代碼。
typedef struct point {
float x;
float y;
} point;
float distance(point *p1, point *p2)
{
return sqrt((p1->x - p2->x)*(p1->x - p2->x) +
(p1->y - p2->y)*(p1->y - p2->y));
}
int main()
{
vector <point> po;
point p1; p1.x = 0; p1.y = 0;
point p2; p2.x = 1; p2.y = 1;
po.push_back(p1);
po.push_back(p2);
vector <point>::iterator ii;
vector <point>::iterator jj;
for (ii = po.begin(); ii != po.end(); ii++)
{
for (jj = po.begin(); jj != po.end(); jj++)
{
cout << distance(ii,jj) << " ";
}
}
return 0;
}
這個答案不正確。 std :: distance可以由ADL在std :: iterator中拾取,因此無論是否使用'std',它都可以形成候選集的一部分。 – Puppy 2014-09-13 17:18:29
@Puppy:確實如此(2.5年來沒有人注意到),但這並不是我所有的答案。通過'const point&p1'傳遞點也可以解決這個問題。 – sbi 2014-10-13 16:45:18
@sbi:不,它不會解決問題。仍然有可能錯誤地寫'distance(ii,jj)'並且得到'std :: distance'。 – 2015-05-09 23:10:19