ホームページ  >  記事  >  バックエンド開発  >  イテレータを使用して点間の距離を計算すると、不正確な距離が得られるのはなぜですか?

イテレータを使用して点間の距離を計算すると、不正確な距離が得られるのはなぜですか?

DDD
DDDオリジナル
2024-11-01 00:11:28536ブラウズ

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

距離計算に反復子を正しく使用する

ベクトルに格納された点間の距離を計算しようとすると、コードでエラーが発生します。問題はイテレータの使用方法にあるようです。

コードでは、ベクトル内の要素へのポインタである std::vector イテレータを使用しています。ただし、これらの反復子を距離関数に直接渡しているため、距離関数はポイント オブジェクト自体へのポインターを期待しています。この不一致により、不正確な結果が発生しています。

これを解決するには、次の 2 つのオプションがあります。

オプション 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。