2003/ 2/ 6

おしごと

とある区間を示す情報を持つクラス (仮に from_date と to_date とする) のリストがあり、2002/ 3/ 1-2002/ 8/31 という区間と 2002/ 5/ 1-2002/12/31 という区間がある場合に、2002/ 3/ 1-2002/ 4/30、2002/ 5/ 1-2002/ 8/31、2002/ 9/ 1-2002/12/31 という 3 つの区間に分割する処理を書いていたものの、なんかうまくいってなくてがっかり。

新たに生成される区間を示すオブジェクトを作ってリストに入れて……とか考えていたら、そもそももっと簡単なやり方があることにようやく気付いてみたり。

区間の終了日の翌日は次の区間の始まりを示す日付なのだから、区間の開始日だけのリストを作成したらそれで終わりじゃないか、という事に気付いたら、あっさりと問題解決。とても単純に区間分割処理が終わることに気付く。

結局 std::list<int> な配列に日付をぽこぽこ入れ、昇順ソートした後で、begin() から end() - 1 までを from_date = *p、to_date = before_date(*(p + 1)) という感じで解決。

うは~、こんなことのために、前のコードとかも含めてどれだけの時間費やしたんだろう。(^^;

区間の終了は、単に次の区間の始まりを示す日付である、という単純かつ当たり前の事に気付くのが遅れたために 2 時間位を無駄にしてしまった……うわ~、時間もったいない。

しかも、会社の飲み会へ移動する電車の中で気付いたので、実際のコードにはまだ反映されていなかったり。

帰宅してからテストコードを書いてみたところ、しっかりと意図通りに動いてくれたので、まぁ、よし。明日出社したら、速攻で同じコードを書かないと。(^^;