0

私には 2 つの問題があります。1 つ目は、メモリまたは初期化されていない場所のエラーが原因で、以下のコードがランダムに終了することです。第二に、アルゴリズムが正しいかどうか確信が持てません。(このアルゴリズムは、関心のある人のために、ハンベリー ブラウン ツイッスのフォトニクス実験をシミュレートすると想定されています)

ベクトルは直線的に増加するタイム スタンプで構成され、停止信号は 180 秒遅延されます。i_th の開始信号が i_th の停止信号よりも小さい場合、タイマーは開始し、タイマーが停止信号に遭遇するまですべての開始信号を無視します。逆に、タイマーが停止している場合は、開始が登録されるまですべての停止を無視する必要があります。コードは、これらの開始/停止間の時間差をバケットソートする必要があります。

-この種の名前がある場合は、以下に投稿してください。

以下のコードは、これらの塗りつぶされたベクトルを取得し、このプロセスをシミュレートしようとします。しかし、アルゴリズムの修正に戻る前に、メモリの問題の何が問題なのかわかりません。

これは私が持っているコードで、常に機能するとは限りません。10,000 double より小さい開始/停止ベクトルで機能しますが、最大 100,000 double まで繰り返す必要があります。

   while( starts.size() > 5 && stops.size() > 5 ){
      if( start.at(0) >= stop.at(0) ){
         thisStart = starts.at(0);
      }
      j=0;
      while( stops.at(j) <= starts.at(0) ){
         j++;
      }
      stops.erase(stops.begin(), stops.begin() + j + 1 );
      thisStop = stops.at(0);
      j=0;
      while( starts.at(j) <= thisStop){
         j++;
      }
      starts.erase(starts.begin(), starts.begin() + j+1 );
      bucketSort(thisStop - thisStart, bins, &counts);
   }
4

1 に答える 1

0
while( stops.at(j) <= starts.at(0) ){
         j++;
      }

stopsこのループは、以下の要素が見つからない場合、範囲外になりstarts[0]ます。例外out_of_rangeがスローされます。これat()が本来の動作です。発生しているエラーの種類を正確に指定していないため、それが問題かどうかはわかりませんが、それは確かに探すべきものです.

次のような条件が必要になる場合があります。

while (j < stops.size() && stops[j] <= starts[0]) { ... }
于 2012-07-10T09:28:50.523 に答える