C++/Library 2021. 3. 26. 15:22

STL 반복자 (Iterators)

  • STL 컨테이너의 멤버들에 접근할 때 공통적인 방법으로 접근할 수 있도록 해주는 것이다.

  • iteratorconst_iterator는 사용할 때 크게 차이가 없는 듯하다.

  • 타이핑이 귀찮아서 보통 auto 키워드를 많이 사용하는 것 같다.

  • end() 함수는 맨 마지막 원소의 다음 주소를 가리킨다.

    • STL의 algorithm 함수들이 iterator로 firstlast를 받을 경우(처음과 끝), 마지막은 보통 end()가 오는 것으로 생각하여 포함시키지 않는다.

      [first, last)라고 생각하면 된다.

vector 예제

  • 원소를 전부 순회하려면 container.begin()부터 container.end() 전까지 반복자를 통해 돌면 된다.

    #include <iostream>
    #include <vector>
    
    int            main()
    {
      using namespace std;
    
      vector<int> container;
      for (int i = 0; i < 10; ++i)
        container.push_back(i);
    
      vector<int>::const_iterator itr;
      itr = container.begin();
      while (itr != container.end())
      {
        cout << *itr << ' ';
        ++itr;
      }
      cout << '\n';
    }
    
    /* stdout stderr
    0 1 2 3 4 5 6 7 8 9
    */
  • 간단하게 auto로 반복하는 예제

    #include <iostream>
    #include <vector>
    
    int            main()
    {
      using namespace std;
    
      vector<int> container;
      for (int i = 0; i < 10; ++i)
        container.push_back(i);
    
      for (auto itr = container.begin(); itr != container.end(); ++itr)
        cout << *itr << ' ';
      cout << '\n';
    
      for (auto& e : container)
        cout << e << ' ';
      cout << '\n';
    }
    
    /* stdout stderr
    0 1 2 3 4 5 6 7 8 9
    0 1 2 3 4 5 6 7 8 9
    */

list 예제

  • 문법은 vector와 비슷하다.

    #include <iostream>
    #include <list>
    
    int            main()
    {
      using namespace std;
    
      list<int> container;
      for (int i = 0; i < 10; ++i)
        container.push_back(i);
    
      for (auto itr = container.begin(); itr != container.end(); ++itr)
        cout << *itr << ' ';
      cout << '\n';
    
      for (auto& e : container)
        cout << e << ' ';
      cout << '\n';
    }
    
    /* stdout stderr
    0 1 2 3 4 5 6 7 8 9
    0 1 2 3 4 5 6 7 8 9
    */

set 예제

  #include <iostream>
  #include <set>

  int            main()
  {
    using namespace std;

    set<int> container;
    for (int i = 0; i < 10; ++i)
      container.insert(i);

    for (auto itr = container.begin(); itr != container.end(); ++itr)
      cout << *itr << ' ';
    cout << '\n';

    for (auto& e : container)
      cout << e << ' ';
    cout << '\n';
  }

  /* stdout stderr
  0 1 2 3 4 5 6 7 8 9
  0 1 2 3 4 5 6 7 8 9
  */

map 예제

  #include <iostream>
  #include <map>

  int            main()
  {
    using namespace std;

    map<int, char> container;
    for (int i = 0; i < 10; ++i)
      container.insert(make_pair(i, char(i + 65)));

    for (auto itr = container.begin(); itr != container.end(); ++itr)
      cout << itr->first << ' ' << itr->second << '\n';
    cout << '\n';

    for (auto& e : container)
      cout << e.first << ' ' << e.second << '\n';
    cout << '\n';
  }

  /* stdout stderr
  0 A
  1 B
  2 C
  3 D
  4 E
  5 F
  6 G
  7 H
  8 I
  9 J

  0 A
  1 B
  2 C
  3 D
  4 E
  5 F
  6 G
  7 H
  8 I
  9 J
  */

'C++ > Library' 카테고리의 다른 글

C++ string  (0) 2021.03.26
C++ STL 알고리즘 (Algorithms)  (0) 2021.03.26
C++ multimap  (0) 2021.03.26
C++ map  (0) 2021.03.26
C++ multiset  (0) 2021.03.26