2011-01-10 90 views
2

我已經在其他語言中看到了各種方法來處理這個問題,但它似乎是一個常見的問題,似乎應該有一個標準的方法來做到這一點。在C++中減少雙精度範圍

我想將浮動範圍列表摺疊爲最小的表示形式。

2.45-3.72 3.16-6.55 7.23-8.96 8.95-10.27

將成爲:

2.45-6.55 7.23-10.27

有C中的函數或庫++某處我可以給我的名單,它會爲我執行減少?我可以很容易地寫我自己的,但爲什麼打擾,如果它已經存在?

+5

這似乎不是一個很常見的問題(我從來沒有遇到過它,至少),這絕對不是你期望在標準庫中找到的東西(儘管它可能在第三方庫中,我不知道) – 2011-01-10 18:24:06

+0

它不存在,但由於很容易寫出你自己的,爲什麼要問呢? – 2011-01-10 18:24:25

+0

實際解決這個問題的代碼會很有趣,儘管它並不那麼困難。聽起來像一個很好的面試問題。 – Omnifarious 2011-01-10 18:41:05

回答

2

聽起來很簡單:

  • 開始與範圍
  • 的名單讓當前 =第一範圍列表
  • ,同時有一個下一個範圍之後當前
    • 如果下一個重疊當前
      • 延長當前也包含下一個
      • 從列表
    • 否則刪除下一個
      • 提前當前一個向前

這應該有所斬斷。

1

我不認爲會有任何標準提供的解決方案,它的方式太具體。

2

Boost有一個interval library。這並沒有明確地包含你所需要的,但是可能使它更容易編寫。個人而言,看着文檔,它讓我擔心圖書館不會試圖讓你清楚地區分封閉和開放的時間間隔。但這對你的目的可能並不重要。