Angenommen, ich Daten von 2D-Linien in der Form diese durch Winkel sortiertIdiom zum Iterieren einer Reihe von Winkeln in einem Container?
struct Point { int x, y; };
struct Line {
Point p1, p2;
double angle() const { return atan2(p2.y-p1.y, p2.x-p1.x); }
};
Und ich möchte speichern haben, die (-PI, PI]
im Intervall sein muss.
Mein Problem: Ich möchte einen Bereich in diesem Container durchlaufen, aber erlauben Sie es, um die Enden des Intervalls zu wickeln. Zum Beispiel "alle Linien zwischen Winkeln PI*3/4
bis -PI*3/4
".
Um zu klären, ob ich wie multimap
Standardcontainer verwenden, kann ich nicht einfach die üblichen tun:
std::multimap<double, Line> lm;
//insert elements...
auto begin = lm.lower_bound(PI*3/4);
auto end = lm.upper_bound(-PI*3/4);
for(auto & i = begin; i != end; ++i) { //infinite loop: end is before begin!
//do stuff with i
}
ich zerhacken könnte „zirkular Iterierte i“ -Funktion an die Stelle des ++i
zu nehmen in die Schleife, denke ich. Aber es scheint, dass es ein allgemeines Problem sein sollte, also frage ich mich, ob es bereits ein bestehendes Idiom gibt, um es anzugehen?
Sie propably eine zyklische Iterator brauchen wie vorgeschlagen durch [diese Antwort] (http://stackoverflow.com/a/1782262/7571258). – zett42
@ zett42 Definitiv sieht nützlich aus. Ich werde es versuchen, wenn ich wieder auf eine Maschine mit Boost komme. Vielen Dank! –