Maison > développement back-end > C++ > 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
Libérer: 2024-11-01 21:06:02
original
731 Les gens l'ont consulté

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>
Copier après la connexion

Sortie incorrecte :

0
1
-1
0
Copier après la connexion

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>
Copier après la connexion

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

<code class="cpp">distance(*ii, *jj);</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal