Maison  >  Article  >  développement back-end  >  Pourquoi est-ce que j'obtiens des distances incorrectes lors du calcul des distances entre les points d'un vecteur C ?

Pourquoi est-ce que j'obtiens des distances incorrectes lors du calcul des distances entre les points d'un vecteur C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-01 21:06:02628parcourir

Why am I getting incorrect distances when calculating distances between points in a C   vector?

Utilisation correcte des itérateurs dans un vecteur C

Énoncé du problème :

Lors du calcul des distances entre des points stockés dans un vecteur, un résultat incorrect est obtenu, potentiellement en raison d'une mauvaise utilisation des itérateurs.

Extrait de code :

<code class="cpp">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;
}</code>

Sortie incorrecte :

0
1
-1
0

Solution :

Le problème vient de l'appel sans le savoir de la fonction std::distance(), qui opère sur les itérateurs. Pour résoudre ce problème, préfixez les types de bibliothèques standard avec std:: et modifiez la fonction distance() pour prendre des références à la place.

<code class="cpp">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>

Ensuite, appelez la fonction à l'aide d'itérateurs déréférencés :

<code class="cpp">distance(*ii, *jj);</code>

Optimisation supplémentaire :

Au lieu d'un typedef, utilisez le point de structure directement en C car il n'est plus nécessaire de le définir comme une structure dans typedef.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn