: 반복자는 컨테이너의 원소를 순회할 수 있는 포인터와 같은 객체
begin()과 end()함수를 통해 컨테이너의 원소를 순회할 수 있다.
반복자를 얻기 위해 사용되는 함수들
begin() 함수
: 말 그대로 컨테이너의 첫번째 원소를 가리킨다.
end() 함수
: 마지막 원소 한 칸 뒤를 가리킨다
- 면접 질문???
: 왜 end()는 마지막 원소를 가리키지 않고, 마지막 원소 한 칸 뒤의 원소를
가리키는지 생각을 말해보세요!
=> (답변) 비어있는 컨테이너를 표현하기 위해서라고 생각합니다.
(설명) end()가 마지막 원소를 가리킨다고 한다면, 원소 하나도 없다면 begin()과 end()는 동일한 곳을 가리킨다.
그리고 원소가 하나 추가된다면 여기서도 begin()과 end()는 동일한 곳을 가리킨다.
이렇게 되면 비어있는 벡터를 표현할 방도가 없기 때문이라고 생각합니다.
end()를 마지막 원소 뒤에 위치함으로써, 원소가 하나도 없을때 begin() = end()이고, 비어있음을 나타내고, 원소가 하나 들어오면 begin은 원소 하나를 가리키고, end는 한개의 원소 뒤를 가리킴으로써 비어있을 때와 하나 들어왔을때 구별할 수 있습니다.
#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;
}