2

グリッドの最後に到達したときに、C++ で初期化されていない変数を無視する必要があります。

         pointMapIt++;
         float nextPointRow;
         if (pointMapIt != grid.points.end())
         {
             nextPointRow = 3.0;
             pointMapIt--;
         }

         if (point.dr != nextPointRow)
             //Do stuff

pointMapIt は、グリッド ポイントを通過する反復子です。反復ごとに nextPointRow をチェックします。nextPointRow が設定されていないため、プログラムは最後の繰り返しでクラッシュします。

は実際の有効な入力である0.0ため、nextPointRow を に設定できません。0.0実際、nextPointRow がどうなるかはわかりません。したがって、私が本当に必要としているのは、(nextPointRow を初期化して) nextPointRow を NULL に対してチェックできるようにすることです。次のようにします。

         if (nextPointRow != null && point.dr != nextPointRow)

これを行うか、問題を完全に回避する方法はありますか?

4

2 に答える 2

4

nextPointRowに設定するのが最も簡単かもしれませんNAN

nextPointRowまたは、後者に有効な値が含まれているかどうかを示すブール値フラグを横に置きます。

さらに別のオプションは、次のようにコードを再配置することです。

     pointMapIt++;
     if (pointMapIt != grid.points.end())
     {
         float nextPointRow = 3.0;
         pointMapIt--;
         if (point.dr != nextPointRow) {
             //Do stuff
于 2013-01-30T19:18:23.413 に答える
3

これには Boost.Optional のようなものを使用する必要があります。

boost::optional<float> nextPointRow;  // initially unset

if (condition) { nextPointRow = 3.0; }
else           { ++pointMapIt;       }

if (nextPointRow && nextPointRow != point.dr) { /* stuff */ }

さらに、else句を使用して、反復子の不要なやり取りを避ける必要があります。

于 2013-01-30T19:23:31.593 に答える