距離計算に反復子を正しく使用する
ベクトルに格納された点間の距離を計算しようとすると、コードでエラーが発生します。問題はイテレータの使用方法にあるようです。
コードでは、ベクトル内の要素へのポインタである 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 サイトの他の関連記事を参照してください。