이터레이터

phoenixKim·2021년 2월 25일
0

stl구현

목록 보기
3/7

이터레이터란?

: 반복자는 컨테이너의 원소를 순회할 수 있는 포인터와 같은 객체
begin()과 end()함수를 통해 컨테이너의 원소를 순회할 수 있다.

반복자를 얻기 위해 사용되는 함수들

  • begin() 함수
    : 말 그대로 컨테이너의 첫번째 원소를 가리킨다.

  • end() 함수
    : 마지막 원소 한 칸 뒤를 가리킨다

    • 면접 질문???
      : 왜 end()는 마지막 원소를 가리키지 않고, 마지막 원소 한 칸 뒤의 원소를
      가리키는지 생각을 말해보세요!
      => (답변) 비어있는 컨테이너를 표현하기 위해서라고 생각합니다.
      (설명) end()가 마지막 원소를 가리킨다고 한다면, 원소 하나도 없다면 begin()과 end()는 동일한 곳을 가리킨다.
      그리고 원소가 하나 추가된다면 여기서도 begin()과 end()는 동일한 곳을 가리킨다.
      이렇게 되면 비어있는 벡터를 표현할 방도가 없기 때문이라고 생각합니다.
      end()를 마지막 원소 뒤에 위치함으로써, 원소가 하나도 없을때 begin() = end()이고, 비어있음을 나타내고, 원소가 하나 들어오면 begin은 원소 하나를 가리키고, end는 한개의 원소 뒤를 가리킴으로써 비어있을 때와 하나 들어왔을때 구별할 수 있습니다.
  • iterator 주소 뒤져보기
    : 의아한 점이 v.begin()의 주소와 크기이지만, 어쨋든 iterator 값은 포인터이고
    가리키는 곳의 번지수를 +1 (그러니까 사이즈 +4 만큼) 증가시키면서 컨테이너 원소를 순회한다는 것이다.
    -> 이를 통해서 ... 어려운듯...

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

int main() {	
	
	vector<int> v;
	v.push_back(1);
	v.push_back(2);
	v.push_back(3);
	v.push_back(4);
	v.push_back(5);
	v.push_back(6);

	cout << "vector 의 주소값 : " << &v << endl;
	cout << "vector[0] 의 주소값 : " << &v[0] << endl << endl;
	cout << "vector[1] 의 주소값 : " << &v[1] << endl << endl;
	cout << "vector[2] 의 주소값 : " << &v[2] << endl << endl;
	
	cout << "vector.begin()의 크기 :" << sizeof(v.begin()) << endl;
	cout << "vector.begin()의 주소값 :" << &(v.begin()) << endl;

	cout << "vector.begin() + 1의 주소값 :" << &(v.begin() + 1) << endl;
	
	cout << "vector.end()의 주소값 : " << &(v.end()) << endl;
	cout << endl;
	vector<int>::iterator i;
	i = v.begin();

	cout << "이터레이터 i의 주소값 : " << &i << ", value : " <<  *i 
		<< ", 이터레이터가 가리키는 곳의 주소값은 : " << &(*i) << endl;
	i++;
	cout << "이터레이터 + 1 증가시킴" << endl;
	cout << "이터레이터 i의 주소값 : " << &i << ", value : " << *i 
		<< ", 이터레이터가 가리키는 곳의 주소값은 : " << &(*i) << endl;

	system("pause");

	return 0;
}
  • 구현하기
  • 이터레이터 종류
  • auto 연산자로 대체 가능 등
  • 이터레이터란?
  • 이터레이터 특징 및 사용법 등...
profile
🔥🔥🔥

0개의 댓글

관련 채용 정보