iterator 반복자

Yongs12 ㅣ 2023. 7. 3. 17:36

c++에서 지원하는 STL에는 공통적인 순회 방법 인터페이스를 지원한다.

이게 바로 iterator이다.

 

포인터와 유사하게 특정 위치를 가르키며 처음과 끝을 순회하기에 용이하다.

 

vector를 예시로 일반적인 순회 방법

#include <iostream>
#include <vector>


int main()
{
    std::vector<int> intVec;

    intVec.push_back(1);
    intVec.push_back(2);
    intVec.push_back(3);
    intVec.push_back(4);
    intVec.push_back(5);

    // 일반적으로 사용하던 순회 방법
    for (int i = 0; i < intVec.size(); ++i)
    {
        std::cout << intVec[i] << std::endl;
    }

    return 0;
}

 

 

Iterator 방식의 순회 방법

#include <iostream>
#include <vector>


int main()
{
    std::vector<int> intVec;

    intVec.push_back(1);
    intVec.push_back(2);
    intVec.push_back(3);
    intVec.push_back(4);
    intVec.push_back(5);

    std::vector<int>::iterator intVecIter = intVec.begin();

    for (; intVecIter != intVec.end(); ++intVecIter)
    {
        std::cout << *intVecIter << std::endl;
    }

    return 0;
}

 


template로 만들어진 stl들은 그 내부에 iterator라는 반복자를 가지고 있다.

그렇기에 만들었을때의 자료형에서 다시 그 네임스페이스안의 iterator를 만들어서 쓸 수 있다.

 

왜 사용해야하는가?

위의 일반적인 방법으로 보여준 vector<int> 인덱스 번호로 직접 접근을 하였으나

 

Iterator를 사용하여 begin()이라는 첫번째 위치의 Iterator를 반환하고 마지막 요소의 다음이 아닐떄까지 end()
요소의 범위를 벗어나지 않고 순회할 수 있다.

 

 

 

참고

iterator를 반복문안에서 ++시킬 때 후위 연산자로 쓰게 되면 임시 객체를 만들게 되므로 전위 연산자로 사용하자.

'C, C++' 카테고리의 다른 글

<stack>  (0) 2023.07.05
<list>  (0) 2023.07.04
<vector>  (0) 2023.07.02
Template  (0) 2023.07.01
이동 생성자, R-value reference ( 오른값 참조 )  (0) 2023.06.30