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 = {1, 2, 3, 4, 5};
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--를 하는 방식 또한 잠시 고려했던 적이 있으나, 이 경우 벡터의 첫 요소가 조건에 걸릴 경우 없는 주소를 가르키므로 컴파일러에 따라 에러가 발생한다.
'컴퓨터 > C, C++' 카테고리의 다른 글
[C, C++]배열 크기 늘리기, 배열 크기 두 배로 바꾸기 (0) | 2022.06.16 |
---|---|
[C++] C++에서 클래스 생성자 재사용(상속, 부모 생성자, 자식 생성자) (0) | 2022.06.06 |
[C]c언어 배열과 문자열, 배열에 문자열 대입하기 (0) | 2022.05.07 |
[C] C언어의 포인터 및 배열 정리, 포인터와 배열의 관계 (0) | 2022.04.06 |
[C언어] CSV 컴마 < , >로 구별된 숫자를 출력하는 프로그램 (0) | 2021.12.08 |
댓글