Wpis z mikrobloga

@RaVo: Nikt nie twierdzi, że powinieneś, mało tego, korzystanie z małych indeksów jednego kontenera na x86 potrafi być szybsze.
Jedyna zaleta używania iteratorów to fakt że nie trzeba przekazywać referencji na kontener to upraszcza konstrukcję algorytmów przykładowo tych z STLa.
Dla vectora obojętnie. Tylko pamiętaj, żeby dla mapy/setu za często nie wołać operator[], szczególnie z tym samym argumentem, bo każdy z nich to O(log n). Ile to razy widziałem kod:

if(map["key"].someFlag()) return map["key"]; // zle

--------------
auto iter = map.find("key");
if(iter->second.someFlag()) return iter->second; // dobrze

-----------
const auto& value = map["key"];
if(value.someFlag()) return value; // też dobrze

@nargil:
Drugi przykład jest nie poprawny, powinno być:

if(iter != map.end() && iter->second.someFlag()) return iter->second;
No i użycie stałego klucza w ostatnim przykładzie jeszcze ujdzie, ale jak by był dość losowy to zostaje opcja z przykładu 2.
@lionbest: nie to miał na celu pokazać przykład. Gdyby klucza nie było w mapie, to pierwszy przykład też by niespecjalnie miał sens, bo wstawiłoby do mapy obiekt zainicjowany domyślnym konstruktorem.
@nargil: No ale tak często się robi, inicjalizuje domyślnie, a potem przykładowo można pominąć paranoiczne sprawdzanie pustego wskaźnika tylko przekazać domyślnie zainicjalizowany obiekt.
Ważne aby wtedy nie zapomnieć zdefiniować domyślnego konstruktora.
@RaVo: jak masz pętlę, która modyfikuje zawartość wektora (usuwa elementy np), to używanie indeksów wymaga dodatkowej logiki

albo nie robisz w forze ++i (i wtedy instrumentujesz tylko kiedy nic nie usuwałeś), albo po osunięciu dekrementujesz indeks (co jest #!$%@? rozwiązaniem ( ͡° ͜ʖ ͡°) )

it != v.end()

jest chyba jednak prostsze w tym przypadku

nie mówiąc już o przypadkach gdy chcesz wszystko z tego vectora wywalić