[C++] iterator

2023. 7. 8. 21:25Algorithm/with C++

1. iterator

 

반복자(iterator)는 객체 지향적 프로그래밍에서 배열이나 그와 유사한 자료 구조의 내부의 요소를 순회(traversing)하는 객체이다.

 

C++에서의 iterator는 컨테이너(배열이나 리스트 등)에 저장되어 있는 요소의 주소를 가리키는 개체를 말하며 포인터를 일반화한 것을 말한다.

 

#include<iostream>
#include<vector>
using namespace std;

vector<int> v;

int main(){
    for(int i=1; i <=5; i++)v.push_back(i);
    for(int i=0; i < 5; i++){
        cout << i << "번째 요소 : " << *(v.begin()+i) << endl;
        cout << &*(v.begin()+i) <<endl;
    }
    for(auto it = v.begin(); it !=v.end(); it++){
        cout << *it << ' ';
    }
    cout << endl;
    for(vector<int>::iterator it = v.begin(); it != v.end(); it++){
        cout << *it << ' ';
    }
    auto it = v.begin();
    advance(it, 3);
    cout << endl;
    cout << *it << endl;
}
/*
0번째 요소 : 1
0x600000e791a0
1번째 요소 : 2
0x600000e791a4
2번째 요소 : 3
0x600000e791a8
3번째 요소 : 4
0x600000e791ac
4번째 요소 : 5
0x600000e791b0
1 2 3 4 5
1 2 3 4 5
4
*/

 

  • *(v.begin()+i) : 이터레이터가 가리키는 주소에 저장된 값.
  • &*(v.begin()+i) : 이터레이터 (주소값). 이터레이터는 바로는 주소값을 반환하지는 못하며 &*를 통해 한단계 더 거쳐서 가리키는 해당 요소의 주소값을 반환할 수 있다.
  • vector<int>::iterator it : int를 저장하는 vectoriterator인 변수 it를 선언
  • auto : 상황에 맞춰 vector<int>::iterator를 자동으로 선언.

 

가. begin()

 

컨테이너의 시작 위치를 가리키는 iterator를 반환한다.

 

나. end()

 

컨테이너의 끝이 아니라!

 

끝 바로 다음의 위치를 가리키는 iterator를 반환한다.

 

for(vector<int>::iterator it = v.begin(); it != v.end(); it++){
        cout << *it << ' ';
}
  • it != v.end() : 아직 순환하지 않은 컨테이너가 남아있으면 true.

 

다. advance(iterator, cnt)

 

advance(it, 3);
cout << endl;
cout << *it << endl;
//12345 중에 4 출력

iterator를 cnt까지 상승시킴.

 

출처 : https://ko.wikipedia.org/wiki/반복자


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

[C++] sort  (0) 2023.07.08
[C++] fill, memset, memcpy  (0) 2023.07.08
[C++] 메모리 할당  (0) 2023.07.07
[C++] 배열과 포인터  (0) 2023.07.01
[C++] pair와 tuple  (0) 2023.07.01