본문 바로가기
컴퓨터/C, C++

[C++] STL vector erase사용법 정리

by 도도새 도 2022. 12. 3.

erase사용 간단 정리

 

erase를 사용하던 중 가끔씩 반환값이 무엇인지 헷갈려 찾아 볼 때가 있었다. 그럴 때를 위해, 혹은 기억하기 위해 간단히 사용법을 남긴다.

 

반환값 = 다음 itrator

 

erase함수로 특정 값을 삭제하면 반환값으로 다음 번지를 가르키는 itrator를 가진다.

 

또한 삭제된 값뒤의 값들이 앞으로 밀리게 된다. 즉, 현재 itrator는 아무것도 가르키지 않으므로, 새로 할당해 줄 필요가 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <vector>
 
using namespace std;
int main(){
    vector<int> v1 = {12345};
    for(auto it = v1.begin(); it != v1.end();){
        if(*it == 3) it = v1.erase(it);//다음 주소 반환
        else it++;
    }
 
    for(auto v:v1){
        cout<<v<<" ";
    }
return 0;
}
 
cs

1 2 4 5

 

또한 증감 연산자를 for문 내에서 사용하지 않았는데, 이는 만약 for문에서 it++를 한다면, 반환받은 it는 조건식을 검사하지 않고 넘어가기 때문이다.

그러나 만약 조건통과시 v1.erase()를 하고 it--를 하는 방식 또한 잠시 고려했던 적이 있으나, 이 경우 벡터의 첫 요소가 조건에 걸릴 경우 없는 주소를 가르키므로 컴파일러에 따라 에러가 발생한다.

 

 

댓글