C ベクトルでの反復子の使用: よくある落とし穴の解決
反復子は、C ベクトル内の要素を走査して操作するために不可欠です。ただし、使用方法を誤ると、予期しない結果が生じる可能性があります。この記事では、ベクトル演算における反復子に関する一般的な問題を調査し、それを修正するための解決策を提供します。
提供されたコード スニペットでは、ベクトルに格納されている点間の距離を計算しようとしています。イテレータが誤って使用されているため、期待される結果と実際の結果は異なります。このコードでは、必要なポインターの逆参照を行わずに std:: distance() 関数を使用しているため、距離の計算が正しく行われません。
問題の修正
この問題を解決するには、次の手順を実行します。 2 つのアプローチがあります:
取得する反復子を逆参照しますポインター:
受け入れるように関数を変更参照:
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));
}
この変更により、反復子の直接逆参照は必要なくなり、距離(*ii, *jj) または distance(*ii, j) を使用して距離の計算を実行できるようになります (j も反復子であるため) ).
一般的には、より明確で潜在的なポインター関連の問題を回避する 2 番目のアプローチを使用することをお勧めします。さらに、ポイントの typedef は、不要な typedef を使用せずに struct を使用するように簡略化できます。
追加の注意事項
イテレータを効果的に使用するための追加のヒントをいくつか示します:
Byこれらの概念を理解し、ガイドラインに従うことで、C ベクトルで反復子を操作するときによくある落とし穴を回避し、正確かつ効率的なコード実行を保証できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3