C++복습) vector(반복자)
반복자(Iterator)
반복자는 포인터와 매우 유사하지만 컨테이너에서 쓰이는 개념이다.
vector<int>iterator it;
반복자로 컨테이너 접근
보통 반복자로 컨테이너에 접근할때는 begin과 end를 사용한다. begin은 컨테이너의 첫번째 원소의 주소값을 가르키는 것이며, end는 컨테이너의 마지막 다음을 가르키고 있다.

vecter<int>::iterater itBegin=v.begin(); //벡터의 첫번째 원소를 가르킴
vecter<int>::iterater itEnd=v.end(); //벡터의 마지막 다음을 가르킴
반복자의 성질
int* ptr;
vector<int>::iterator it;
ptr= &p[0];
it = p.begin();

포인터는 말그대로 주소를 담기 위한 바구니이기에 어디에 소속되어 있지 않고, 연산의 편의성을 제공하지 않지만, 반복자는 컨테이너와 컨테이너 안의 있는 요소를 구별하고 요소의 값 확인이 가능하다. 또한 컨테이너 안에 있는 요소들 간에 이동할 수 있는 연산 제공하고 있다.
반복자의 종류
반복자에는 다양한 종류가 있지만 이번 포스팅에서는 특이한 반복자 두가지를 다루고자 한다.
1.역방향 반복자
역방향 반복자는 말그대로 컨테이너에 있는 값을 역으로 내보내는 반복자이다. 컨테이너에 1~9까지의 숫자가 있다면 아래의 코드는 9~1의 숫자를 출력할 것이다.
for(vector<int>::reverse_iterator it=v.rbegin();it!=v.rend();it++)
{
cout<<it<<endl;
}
2.const 반복자
포인터로 따지면 const 포인터로 비유할수 있다. 임의의 데이터 수정을 막고 읽기만 할때 사용한다.
vector<int>::const_iterater cit1=v.cbegin();
vector<int>::const_iterater cit2=v.cend();
반복자의 필요성
어떠한 컨테이너에 소속되어 있는지를 알려주고 연산의 편의성도 제공해주지만 굳이 복잡한 반복자를 사용해야되는가 하는 의문이 생길수 있다. 하지만 반복자의 이점은 벡터뿐만 아니라 다른 컨테이너에서도 사용이 가능하다는 점이다.
예를 들자면 벡터에서는 v[i]와 같은 문법이 사용되지만, 리스트의 경우 v[i]와 같은 문법이 사용이 되지 않는다. 반면 it=v.bein()과 같은 문법은 리스트에서도 사용이 되기에 컨테이너간의 데이터처리에 유용하다.