>  기사  >  백엔드 개발  >  반복자를 사용하여 점 사이의 거리를 계산할 때 거리가 잘못된 이유는 무엇입니까?

반복자를 사용하여 점 사이의 거리를 계산할 때 거리가 잘못된 이유는 무엇입니까?

DDD
DDD원래의
2024-11-01 00:11:28619검색

Why am I getting incorrect distances when using iterators to calculate distances between points?

거리 계산에 올바른 반복자 사용

벡터에 저장된 점 사이의 거리를 계산하려고 할 때 코드에 오류가 발생했습니다. 문제는 반복자를 사용하는 방식에 있는 것 같습니다.

귀하의 코드는 벡터 내의 요소에 대한 포인터인 std::Vector 반복자를 사용합니다. 그러나 이러한 반복자를 거리 함수에 직접 전달하면 점 개체 자체에 대한 포인터가 필요합니다. 이러한 불일치로 인해 잘못된 결과가 발생합니다.

이 문제를 해결하려면 다음 두 가지 옵션이 있습니다.

옵션 1: 반복자 참조 해제

해당 포인트 객체에 대한 참조를 얻기 위한 반복자입니다. 이는 * 연산자를 사용하여 수행할 수 있습니다. 수정된 코드는 다음과 같습니다.

<code class="C++">for (ii = po.begin(); ii != po.end(); ii++)
{
    for (jj = po.begin(); jj != po.end(); jj++)
    {
        cout << distance(*ii, *jj) << " ";
    }
}</code>

옵션 2: 함수에서 참조 사용

또는 거리 함수를 수정하여 점 개체에 대한 참조를 직접 가져올 수 있습니다.

<code class="C++">float distance(const point& p1, const point& p2)
{
    return sqrt((p1.x - p2.x)*(p1.x - p2.x) +
                (p1.y - p2.y)*(p1.y - p2.y));
}</code>

이 방법으로 반복자를 사용하여 거리 함수를 직접 호출할 수 있습니다.

<code class="C++">for (ii = po.begin(); ii != po.end(); ii++)
{
    for (jj = po.begin(); jj != po.end(); jj++)
    {
        cout << distance(*ii, *jj) << " ";
    }
}</code>

이러한 방법 중 하나를 사용하면 다음과 같은 점 쌍 사이의 정확한 거리 계산을 얻어야 합니다. 당신의 벡터.

위 내용은 반복자를 사용하여 점 사이의 거리를 계산할 때 거리가 잘못된 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.