Dzisiaj w kodzie popełnionym przez kogoś z firmy, odnalazłem perełkę pokazującą inny sposób tworzenia pętli for w oparciu o iteratory. Tym drobiazgiem czyniącym róznicę jest sprytne wykorzystanie operatora przecinka i konstruktora iteratora. Wygląda to tak:
#include <vector> #include <iostream> int main() { int array[] = { 1, 2, 3, 4, 5, 6, 7, 8 }; std::vector<int> vector(array, array+8); for ( std::vector<int>::const_iterator it(vector.begin()), end(vector.end()); end != it; ++it ) std::cout << *it << std::endl; return 0; }
Takie proste, a jakie ładne.
I takie typowe. Brakuje tylko słówka kluczowego auto zamiast tego strasznego tasiemca i opakowania całości w makro. ;)
OdpowiedzUsuńMoje serce krwawi widząc makra.
Usuń#include
OdpowiedzUsuń#include
#define FOREACH(iteratorName,collection) for(auto iteratorName((collection).begin()),end((collection).end()); iteratorName!=end; ++iteratorName)
int main()
{
int array[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
std::vector vector(array, array+8);
FOREACH (each, vector) std::cout << *each << std::endl;
return 0;
}