2009/02/19

[STL] vector 에서 [] 과 at() 의 차이점

vector 의 원소에 접근하는 방법은 배열의 접근 방법과 갈은 [] 를 이용하는 방법과 멤버 함수인 at() 을 이용하는 방법이 있다.
이 두가지 방법의 차이점은 첨자의 범위를 체크하는지 여부와 범위를 벗어난 접근일 경우 예외 발생 여부이다.


배열 접근 기호인 [] 에의한 접근은 첨자의 범위를 체크하지 않기 때문에 범위를 벗어난 접근을 시도할 경우 예외를 발생하지 않고 에러를 발생한다.



멤버함수 at() 를 이용한 접근은 첨자의 범위를 체크하여 벗어난 접근을 시도할 경우 std::out_of_range 예외를 발생 한다.


범위내의 접근을 보장할 경우 별도의 범위 체크가 필요 없으므로 []의해 원소에 접근하며
for ( int n = 0; n < (int)vInt.size(); ++n )

{

int a = vInt[ n ];

:

}



그렇지 않을 경우 at() 의한 접근으로 예외를 처리해 준다.
void foo( int n )

{

try

{

int a = vInt.at( n );

}

catch (std::out_of_range& e)

{

AfxMessageBox( _T("Catch the std::out_of_range") );

}

}


Original Post : http://neodreamer-dev.tistory.com/256

No comments :

Post a Comment