Maison > développement back-end > C++ > Pourquoi mes calculs de distance à l'aide d'itérateurs C produisent-ils des résultats inattendus ?

Pourquoi mes calculs de distance à l'aide d'itérateurs C produisent-ils des résultats inattendus ?

Mary-Kate Olsen
Libérer: 2024-11-05 00:52:02
original
483 Les gens l'ont consulté

Why Do My Distance Calculations Using C   Iterators Produce Unexpected Results?

Utiliser efficacement les itérateurs : résoudre les erreurs de calcul de distance

En C, les vecteurs offrent un moyen pratique de stocker des données. Pour les parcourir, des itérateurs sont utilisés. Cependant, une mauvaise utilisation des itérateurs peut conduire à des résultats incorrects.

Le problème

Considérez un scénario dans lequel vous souhaitez calculer la distance entre des points stockés dans un vecteur. Cependant, les résultats que vous obtenez diffèrent des valeurs attendues. Cela pourrait indiquer un problème dans la façon dont les itérateurs sont utilisés dans le vecteur.

Résoudre le problème

Lorsque vous accédez à un élément dans un vecteur à l'aide d'un itérateur, vous obtenez un référence à l'élément lui-même. Pour passer un pointeur vers l'élément à une fonction, vous devez déréférencer l'itérateur et prendre son adresse : &*ii.

Cependant, une meilleure pratique consiste à repenser la fonction de distance pour accepter des références au lieu de pointeurs :

<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

Avec cette modification, vous pouvez appeler la fonction de distance comme distance(ii,jj) dans la boucle.

Notes supplémentaires

  1. L'utilisation de "typedef struct" est une syntaxe obsolète de style C. En C , utilisez plutôt "struct".
  2. Passer des vecteurs directement à la fonction de distance serait plus efficace que de déréférencer des itérateurs :

    <code class="cpp">float distance(const vector<point>& vec, size_t i, size_t j)
    {
     // Your previous distance calculation code
    }</code>
    Copier après la connexion

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