상세 컨텐츠

본문 제목

[C++] iterator 반복자 [vector 활용 예제]

C, C++

by oksk2003kr 2019. 11. 13. 16:46

본문

반응형

컨테이너의 원소들을 순회(돌아다니는)할 수 있는 객체
반복자는 포인터와 유사하게 동작을 하지만 추가적으로 컨텐이너(vecotr,list,queque,set,map 등)와 알고리즘(검색,삭제,복사)을 하나로 동작가능하도록 하는 인터페이스 역할

강점 : 지정한 컨테이너 타입에 맞춰 순회하다 Iteroator가 알아서 메모리를 관리함, delete와 메모리 관리 작업 불필요

operator* : 현재 가리키고 있는 주소의 원소 값
operator++ : 다음 주소의 원소 값
operator-- : 이전 주소의 원소 값
operator = : 반복자를 할당

begin() : 컨테이너 원소의 첫번째 위치
(* 주의사항)
end() 컨테이너 원소 마지막 위치를 한번 지난 위치 ex)  for(vector::iterator it=A.begin(); it!=A.end(); ++it) : end()가 아닐때 까지 조건문 수행, 즉, 마지막까지 조건 수행

Iterator 종류 
1) container::iterator : 원소 읽기/쓰기 가능
2) container::const_iterator : 원소 읽기 전용

 

 

#include  <iostream>
#include  <vector>

using namespace std;

int main()
{
    vector a;
    for(int i = 0 ; i < 4; i ++) 
        a.push_back(i);

    vector::iterator it;  // 컨테이너<자료형>::iterator 변수명
    for(it = a.begin(); it != a.end(); ++it) // end() 가 아닐때까지 반복문 수행
        cout<<"vector_1:"<<*it<<endl;
    cout<<endl;
    it = a.begin();
    for(int i = 0 ; i < a.size();i++)
        cout<<"vector_2 :"<<it[i]<<endl;

    it[2] = 10; // const_iterator가 아닌 iterator을 이용한 선언임으로 쓰기 가능
    cout<<endl;
    it = a.begin();
    it += 2; // 포인터와 동일한 개념으로 + 연산자를 활용하여 주소를 이동 임의 접근 가능
    cout<<"vector_3_0:"<<*it<<endl<<endl; // 3번째 인덱스로 주소가 이동된 원소로 출력
    for(it = a.begin(); it != a.end(); ++it) // end() 가 아닐때까지 반복문 수행
        cout<<"vector_3_1:"<<*it<<endl; // 비교를 위한 원소 정보 출력

    cout<<endl;

    /*  const_iterator 를 사용하여 값을 쓰기 했을 경우 오류 발생 
    vector::const_iterator con_it;  // 컨테이너<자료형>::iterator 변수명
    con_it = a.begin();
    for(int i = 0 ; i < a.size();i++)
        con_it[i] = 1; // 'con_it' : const인 변수에 할당할 수 없습니다
    */

    it = a.begin();
    for(int i = 0 ; i < a.size();i++)
        cout<<"vector_5_0 :"<<it[i]<<endl;
    cout<<endl;
    it += 2;
    cout<<"vector_5_1 :"<<it[1]<<endl;  // it[4] 정보에 접근
    // cout<<"vector_5 :"<<it[2]<<endl; max가 4임으로 잘못된 접근으로 에러 발생

    return 0;
}

 

참고 자료 
https://eehoeskrap.tistory.com/263
https://blankspace-dev.tistory.com/348
https://eehoeskrap.tistory.com/263

반응형

관련글 더보기

댓글 영역