::NPTEAM:: Network Programer Team

검색 :
RSS 구독 : 글 / 댓글 / 트랙백 / 글+트랙백

[STL] STL Container 자료구조 순환 삭제를 위한 코드

STL Container 자료구조 순환 삭제를 위한 코드

컨테이너가 표준 시퀀스 컨테이너이면, 컨테이너 요소를 하나씩 사용하는 루프를 작성합니다.
(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;
}
2009/11/30 21:52 2009/11/30 21:52

맨 위로