유용한 기술

STL 연속 메모리 컨테이너에서 특정 값 지우기

무한 나무 2023. 2. 14. 00:05

Vector 기준 특정 값 지우는 방법 (string, deque에도 사용 가능)

#include <vector>
#include <algorithm>

vector<int> ary = {1,2,3,4,5,6,7,8,9};

//값 3 지우기
ary.erase( remove(ary.begin(),ary.end(),3), ary.end());

//홀수 지우기
bool check(int num)
{
    return num%2;
}

ary.erase( remove_if(ary.begin(),ary.end(),check), ary.end());

 

algorithm의 [remove()/remove_if()] 함수는  특정값을 컨테이너에서 지운다기 보다는, 특정값들을 맨뒤에 모아두고 그들의 첫번째 iter값을 리턴한다.

 

3지우기로 예를 들면 {1,2,3,4,5,6,7,8,9} 에서 {1,2,4,5,6,7,8,9,3(iter)} 가 되고 필요없는 부분의 첫번째 위치[9]의 iter를 리턴한다.

 

그래서 이 iter를 이용해서 erase하여 해당위치부터 end()위치까지 완벽히 지워준다.