Wyświetlanie klasy Vector (i innych kontenerów), bez użycia pętli
Ostatnio zgłębiam wiedzę odnośnie możliwości zawartych w STL’u. Jedna rzecz która mi się bardzo spodobała to porzucenie wykorzystywania klasycznych pętli a wykorzystanie funkcji które posiadają w sobie uniwersalne algorytmy.
W starym stylu pomyślał bym o takim czymś:
for(vector<int>::iterator it=vec.begin(); it != vec.end(); ++it)
{
cout << *it << " ";
}
Rzuca się konieczność utworzenia makabrycznie długiego w zapisie iteratora, później trzeba pamętać o wykorzystaniu * aby uzyskać wartość pod iteratorem.
Można go zastąpić jedną linijką (co jest zgodne z VS 2008):
copy(vec.begin(), vec.end(), ostream_iterator<int>(cout," "));
lub dla chcących wykorzystać lambdy (ponownie tylko w VS 2010) mogą skorzystać z for_each:
for_each(vec.begin(), vec.end(),[](int x) {cout << x << " ";});
Czy warto zmieniać kod na nowy styl, zgodny z duchem C++11?
Tak, to przyszłość.