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

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

DDD
リリース: 2024-11-01 00:11:28
オリジナル
654 人が閲覧しました

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 サイトの他の関連記事を参照してください。

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