ホームページ > バックエンド開発 > C++ > C イテレータを使用した距離計算で予期しない結果が生じるのはなぜですか?

C イテレータを使用した距離計算で予期しない結果が生じるのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-05 00:52:02
オリジナル
482 人が閲覧しました

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

反復子の効果的な使用: 距離計算エラーの解決

C では、ベクトルはデータを格納する便利な方法を提供します。それらを反復処理するには、イテレータが使用されます。ただし、イテレータを不適切に使用すると、不正確な結果が生じる可能性があります。

問題

ベクトルに格納されている点間の距離を計算するシナリオを考えてみましょう。ただし、得られる結果は期待値とは異なります。これは、ベクトル内でのイテレータの使用方法に問題があることを示している可能性があります。

問題の解決

イテレータを使用してベクトル内の要素にアクセスすると、要素自体への参照。要素へのポインターを関数に渡すには、反復子を逆参照してそのアドレスを取得する必要があります: &*ii.

ただし、ポインターの代わりに参照を受け入れるように距離関数を再設計することをお勧めします。

<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>
ログイン後にコピー

この変更により、ループ内で距離関数を distance(ii,jj) として呼び出すことができます。

補足

  1. 「typedef struct」の使用は、古い C スタイルの構文です。 C では、代わりに "struct" を使用します。
  2. 反復子を参照解除するよりも、ベクトルを距離関数に直接渡す方が効率的です。

    <code class="cpp">float distance(const vector<point>& vec, size_t i, size_t j)
    {
     // Your previous distance calculation code
    }</code>
    ログイン後にコピー

以上がC イテレータを使用した距離計算で予期しない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート