将区间与邻域 1 相交并处理输入 LONG_MAX 和 LONG_MIN

问题描述 投票:0回答:0

我正在寻找形式为 (Lo, Hi) 和 lo 的 2 个区间的交集 <= hi.

我认为以下是王子:

  1. (1,3) 和 (1,2)
  2. (1,3) 和 (3,3)
  3. (10.100) 和 (-5.15)
  4. 注意交点,距离为一,所以这里也作为(1,3)和(4,5)的交点

反之交集不是,例如(1,3)和(5,6)

希望思路清晰。 我创建了这段检查交集的代码,但我没有考虑 LONG_MAX 和 LONG_MIN 的可能值,并且该程序对我来说无法正常工作。有什么方法可以进行最小的更改以使程序运行吗?

vector<CRange> CRange::operator + (const CRange &src) const
{
  vector<CRange> list;

  if(src.getLo() > m_Hi+1 || m_Lo > src.getHi()+1) // no intersect 
  {
    list.insert(lower_bound(list.begin(), list.end(), CRange(m_Lo, m_Hi), CRange::compareIntervals), CRange(m_Lo, m_Hi));

    list.insert(lower_bound(list.begin(), list.end(), CRange(src.getLo(), src.getHi()), CRange::compareIntervals), CRange(src.getLo(), src.getHi()));
  }
  else // intersect
  {
    list.insert(lower_bound(list.begin(), list.end(), CRange(std::min(m_Lo, src.getLo()), std::max(m_Hi, src.getHi())), CRange::compareIntervals), CRange(std::min(m_Lo, src.getLo()), std::max(m_Hi, src.getHi())));
  }
  
  return list;

}
c++ intervals operator-keyword intersection
© www.soinside.com 2019 - 2024. All rights reserved.