我正在寻找形式为 (Lo, Hi) 和 lo 的 2 个区间的交集 <= hi.
我认为以下是王子:
反之交集不是,例如(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;
}