czestą operacją jest usuwanie elementow z wektora stl za pomocą iteratora w pętli. zeby to zrobić bezpiecznie, należy ustawic iterator na element ktory zwrocilo erase().
#define erase_iter_from_loop(iter, vec) \
iter = vec.erase(iter); \
if (iter == vec.end()) break; \
iter–;
przykład:
for (vector<x>::iterator i = y.begin(); i != y.end(); i++) {
erase_iter_from_loop(i, y);
}
opakuj to makro chociaz w do{}while;
ladny podszyw
do {} while; stosuje sie w C z powodu bledu kompilatora. w C++ nie trzeba jak sie programuje z glowa.
ten iter- na koncu wyglada dziwnie …
nie do { } while dodaje sie po to zeby mozna bylo ladnie postawic srednik za komenda i zeby kompilator rzucil normalnym bledem jesli ktos nie postawi takiego srednika.
druga sprawa to w stlu zalecane jest robienie preinkrementacjiu i predekrementacji a nie post – chodzi tu o sposob w jaki przeciazone sa operatory — i ++
iter– na koncu jest tu kluczowy.
fakt, –iter jest zalecana forma.