컨테이너가 표준 시퀀스 컨테이너이면, 컨테이너 요소를 하나씩 사용하는 루프를 작성합니다.
(erase를 호출할 때마다 그 함수의 반환값으로 반복자를 업데이트 하는 일을 꼭 해야 합니다.)
컨테이너가 표준 연관 컨테이너이면, 컨테이너 요소를 하나씩 사용하는 루프를 작성합니다.
(erase를 호출하면서 erase에 넘기는 반복자를 후위 증가 연산자로 증가시킵니다.)
(출처 : Effective STL p88)
팁 : erase() 함수의 리턴값이 있으면 반환값을 받고, 없으면 후위 증가 연산자로 증가시킵니다.
// std::vector 순환 삭제 코드
typedef std::vector< int > VEC_Container;
VEC_Container vecContainer;
vecContainer.push_back( 1 );
vecContainer.push_back( 2 );
vecContainer.push_back( 3 );
vecContainer.push_back( 4 );
vecContainer.push_back( 5 );
VEC_Container::iterator it = vecContainer.begin();
for( ; it != vecContainer.end(); )
{
// erase 코드
if( TRUE /*FALSE*/ )
{
it = vecContainer.erase( it );
continue;
}
++it;
}
// std::list 순환 삭제 코드
typedef std::list< int > LIST_Container;
LIST_Container listContainer;
listContainer.push_back( 1 );
listContainer.push_back( 2 );
listContainer.push_back( 3 );
listContainer.push_back( 4 );
listContainer.push_back( 5 );
LIST_Container::iterator it = listContainer.begin();
for( ; it != listContainer.end(); )
{
// erase 코드
if( TRUE /*FALSE*/ )
{
it = listContainer.erase( it );
continue;
}
++it;
}
// std::map 순환 삭제 코드
typedef std::map< int, int > MAP_Container;
MAP_Container mapContainer;
mapContainer.insert( std::make_pair(1, 5) );
mapContainer.insert( std::make_pair(2, 4) );
mapContainer.insert( std::make_pair(3, 3) );
mapContainer.insert( std::make_pair(4, 2) );
mapContainer.insert( std::make_pair(5, 1) );
MAP_Container::iterator it = mapContainer.begin();
for( ; it != mapContainer.end(); )
{
// erase 코드
if( TRUE /*FALSE*/ )
{
mapContainer.erase( it++ );
continue;
}
++it;
}

















