C++ | 이터레이터

heige·2023년 12월 28일

CPP

목록 보기
5/12
post-thumbnail

이터레이터

  • 이터레이터는 컨테이너에 저장되어 있는 요소의 주소를 가리키는 개체를 말한다.
  • 포인터를 일반화한 것을 말한다.
  • vector, map 등 각각 다르게 구현된 컨테이너들을 일반화된 이터레이터를 통해 쉽게 순회할 수 있다.

주소값을 바로 반환하지는 못하며 &*를 통해 한단계 더 거쳐서 가리키는 해당 요소의 주소값을 반환할 수 있다.

#include <bits/stdc++.h>
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) << "\n";
    cout << &*(v.begin() + i) << '\n';
  }
  
  for (auto it = v.begin(); it != v.end(); it++) {
    cout << *it << ' ';
  }
  cout << '\n';
  for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
    cout << *it << ' ';
  }
  
  auto it = v.begin();
  advance(it, 3);
  cout << '\n';
  cout << *it << '\n';
  return 0;
}

vector<int>:: iteratorauto로도 간단히 선언할 수 있다.

이터레이터의 함수 중 많이 쓰이는 함수는 begin(), end(), advance()가 있다.

begin()

컨테이너의 시작 위치를 반환한다.

end()

컨테이너의 끝 다음의 위치를 반환하는 데 사용된다.
it != v.end() 이런 식의 코드는 컨테이너를 다 순회하고 컨테이너의 끝에 도착했다는 것을 가리킨다.

advance(iterator, cnt)

해당 iteratorfmf cnt까지 증가시킨다.

이터레이터와 포인터의 차이

  • 이터레이터는 어떠한 컨테이너(배열, 맵 등)의 범위 안에서 일부 요소를 가리키며 해당 요소들을 순회할 수 있는 개체이다. 컨테이너의 개체를 참조하는 것이기 때문에 이 자체를 제거할 수 없다.
  • 반면 포인터는 변수의 메모리 주소를 저장하는 개체이며, 포인터는 delete를 통해 포인터를 제거할 수 있다.

이터레이터 = 일반화된 포인터

이터레이터는 컨테이너의 구조나 컨테이너 안에 들어가 있는 요소의 타입과는 상관없이 컨테이너에 저장된 데이터를 순회하는 과정을 담당한다. 즉, 각각의 다른 요소들을 쉽게 탐색할 수 있게 “일반화”한 장치이다.

profile
웹 백엔드와 클라우드 정복을 위해 탄탄한 기반을 쌓아가고 있는 예비개발자입니다. 'IT You Up'은 'Eat You Up'이라는 표현에서 비롯되어, IT 지식을 끝까지 먹어치운다는 담고 있습니다.

0개의 댓글