C++ 반복자 (iterator)
포인터와 상당히 비슷하며, 컨테이너에 저장되어 있는 원소들을 참조할 때 사용
반복자란, 컨테이너에 저장되어 있는 모든 원소들을 전체적으로 훑어 나갈 때 사용하는, 일종의 포인터와 비슷한 객체라고 할 수 있음
- 반복자는 컨테이너 내부의 원소(객체)를 가리키고 접근.(* 연산자)
- 반복자는 다음 원소로 이동하고 컨테이너의 모든 원소를 순회할 수 있어야 한다. (++, !=, == 연산자 제공)
반복자의 범주
양방향 반복자 : ++, -- 이동이 가능한 반복자 : (list, set, multiset, map, mutilmap)
임의 접근 반복자 : 양방향 반복자 기능에 +, -, +=, -=, [] 연산이 가능한 반복자 : (vector)
* end() 함수는 끝이 아니다.
end()가 가리키고 있는 것은 맨 마지막 원소의 바로 다음번 원소이다. 따라서 이러한 반복자를 past-the-end 반복자라고 부른다.(종점을 지나쳐버린 곳을 가리키는 반복자)
벡터 iterator 선언 예시
vector<int> v; //벡터 선언
vector<int>::iterator it; //iterator 선언
v.push_back(1);
v.push_back(2);
it = v.begin(); //it 초기 값
cout << *it << endl;
it++; //+한 칸이동
it = v.end(); //마지막 칸의 다음 칸
it--; //-한 칸이동 (마지막 칸)
cout << *it << endl;
모든원소 출력 예시
for (iter = v.begin(); iter != v.end(); ++iter)
{
cout << *iter << endl;
}
auto
초기화 값에 따라 알아서 데이터 타입을 정해주는 키워드
auto a1 =10; //int 타입
auto a2 =10.f //float 타입
auto a3 = "c"; //char 타입
auto a4 ="BlockDMask" // string 타입
auto a5 = {10,20,30}; //int 배열 타입
auto에 const, const& 한정자가 붙을 때
auto는 한정자와 함께 사용하면 효율적이다.
auto와 &, * 함께 사용하기
&, *의 특성은 복사가 되지않고 주소를 가리키거나 참조를 하는 것
vector auto 이용하기
for(auto it = v.begin(); it!= v.end(); ++it)
{
*it *= 2; //vector원소에 x2 하기
}
vector auto& 이용하기
for(auto& elem : v)
{
elem *=2; //vector 원소에 x2 하기
}
'C++' 카테고리의 다른 글
C++ assign (vector, map) (0) | 2020.07.16 |
---|---|
C++ 동적할당 (0) | 2020.07.14 |
C++ ODBC (Open DataBase Connectivity) (0) | 2020.06.26 |
C/C++ 문자열 분리 함수 (strtok, strtok_s) 유용 warning발생 (0) | 2020.06.26 |
C++ 자료의 크기 및 범위 총 정리 (0) | 2020.06.26 |