с учетом следующих классов:
#include <vector>
using std::vector;
enum TypeSeg {
OPEN, CLOSE, CLOSE_LEFT, CLOSE_RIGHT
};
template<class T>
class Segment {
T left;
T right;
TypeSeg typeS;
public:
Segment(T left, T right, TypeSeg typeS) :
left(left), right(right), typeS(typeS) {
}
//.....
};
template<class T>
class SegCollection {
vector<Segment<T>> segments;
public:
//.....
};
Так что Сегмент описывает сегмент ?left, right?
while:
если typeS == OPEN так: (left,right)
.
если typeS == ЗАКРЫТЬ так: [left,right]
.
, если typeS == CLOSE_LEFT, так: [left,right)
.
, если typeS == CLOSE_RIGHTso: (left,right]
.
и SegCollection описывает набор сегментов так, что:
SegCollection no содержит два одинаковых сегмента, и no не содержит двух сегментов с пересечением (вместо них будет объединение их), и даже no не содержит два сегмента, напримерчто: [1,4)
и [4,5)
(например), но оно будет содержать [1,5)
.
Как я могу реализовать operator-()
для SegCollection, который удаляет сегмент из SegCollection так, что: этот сегмент должен быть не в SegCollection, а во всех точках (из всех сегментов в SegCollection), которые существуют в SegCollection и в удаленном сегменте будут удалены из сегментов, существующих в SegCollection.
Например: дано: [1,7] , [9,12]
, если мы удалим (2,5)
, то получим: [1,2] , [5,7] , [9,12]
.
Я не знаю (я думал об этом несколько часов ..), как мне поступить, если мне нужно разделить сегмент после удаления сегмента (например, [1,7]
в примере, который изменился на[1,2] , [5,7]
)?
Примечание. Сегмент - это класс шаблона, поскольку он может быть из (int, int), (float, float), например