Post

[C++] 반복자란? #23

1. 반복자란?

반복자는 컨테이너에 저장된 값들을 순차적으로 순회해주는 객체입니다.
반복자는 이전 블로그에서 다룬 범위 기반 반복문에서도 사용됩니다.
따라서 범위 기반 반복문은 반복자가 존재하는 객체에만 사용할 수 있습니다.

2. 반복자 만들기

반복자는 개념만 이해하고 넘어가는 경우가 대부분이지만,
이 블로그에서는 반복자를 생성해볼 예정입니다.

반복자는 대부분의 STL 컨테이너가 가지고 있지만,
자신만의 컨테이너를 만들 때는 반복자를 만드는 것이 유용하기 때문입니다.

반복자의 구조는 반복자안에 노드가 존재하는 방식으로 구현할 것입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
template <typename T>
class Node {
public:
	T data;
	Node<T>* next;

	Node(T data, Node<T>* next) {
		this->data = data;
		this->next = next;
	}
	
	bool operator==(const Node& node) {
		return data == node.data && next == node.next;
	}
}

기본적인 노드를 생성하고 반복자를 생성합니다.
반복자는 가리키는 요소의 값에 접근할 수 있어야하고,
대입, 관계, 증가 연산자가 필요합니다.
따라서 연산자 오버로딩이 필요합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
template <typename T>
class CustomIterator {
public:
	Node<T>* currentNode;

	CustomIterator(Node<T>* node) {
		currentNode = node;
	}

	T& operator*() {
		return currentNode->data;
	}

	CustomIterator operator++() {
		currentNode = currentNode->next;

		return this;
	}

	bool operator==(const CustomIterator& ref) {
		return currentNode == ref.currentNode;
	}
	
	bool operator!=(const CustomIterator& ref) {
		return currentNode != ref.currentNode;
	}
}

위 코드처럼 각각의 연산자를 오버로딩해서 반복자를 구현할 수 있습니다.

This post is licensed under CC BY 4.0 by the author.