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를 반복문안에서 ++시킬 때 후위 연산자로 쓰게 되면 임시 객체를 만들게 되므로 전위 연산자로 사용하자.