wtorek, 27 stycznia 2015

C++: Operator przecinka, czyli jak ładnie zrobić pętlę

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.

3 komentarze:

  1. I takie typowe. Brakuje tylko słówka kluczowego auto zamiast tego strasznego tasiemca i opakowania całości w makro. ;)

    OdpowiedzUsuń
  2. #include
    #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;
    }

    OdpowiedzUsuń