std::vector<T,Allocator>:: erase
| (1) | ||
|
iterator erase
(
iterator pos
)
;
|
(C++11 이전) | |
|
iterator erase
(
const_iterator pos
)
;
|
(C++11 이후)
(C++20 이후 constexpr) |
|
| (2) | ||
|
iterator erase
(
iterator first, iterator last
)
;
|
(C++11 이전) | |
|
iterator erase
(
const_iterator first, const_iterator last
)
;
|
(C++11 이후)
(C++20 이후 constexpr) |
|
컨테이너에서 지정된 요소들을 삭제합니다.
[
first
,
last
)
.
반복자(포함하여
end()
반복자) 및 삭제 지점 또는 그 이후의 요소에 대한 참조는 무효화됩니다.
반복자 pos 는 유효하고 역참조 가능해야 합니다. 따라서 end() 반복자(유효하지만 역참조 불가능한)는 pos 의 값으로 사용할 수 없습니다.
반복자 first 는 역참조 가능할 필요가 없습니다 만약 first == last 인 경우: 빈 범위를 삭제하는 것은 no-op입니다.
목차 |
매개변수
| pos | - | 제거할 요소에 대한 반복자 |
| first, last | - | 제거할 요소들의 범위 를 정의하는 한 쌍의 반복자 |
| 타입 요구사항 | ||
-
T
가
MoveAssignable
이 아니라면, 동작은 정의되지 않습니다.
|
||
반환값
제거된 마지막 요소 다음의 반복자.
[
first
,
last
)
범위가 비어 있다면,
last
가 반환됩니다.
예외
T
의 할당 연산자에 의해 예외가 발생하지 않는 한 예외를 발생시키지 않습니다.
복잡도
선형:
T
의 소멸자 호출 횟수는 삭제된 요소 수와 동일하며,
T
의 할당 연산자는 삭제된 요소 이후 벡터에 남아있는 요소 수만큼 호출됩니다.
참고 사항
컨테이너 요소를 조건자(predicate)에 기반하여 삭제해야 할 때, 컨테이너를 순회하며 단항
erase
를 호출하는 대신, 일반적으로 반복자 범위 오버로드가
std::remove()/std::remove_if()
와 함께 사용되어 남아있는(삭제되지 않은) 요소들의 이동 횟수를 최소화합니다 — 이것이 erase-remove 관용구입니다.
std::erase_if()
가 erase-remove 관용구를 대체합니다.
(C++20부터)
예제
#include <vector> #include <iostream> void print_container(const std::vector<int>& c) { for (int i : c) std::cout << i << ' '; std::cout << '\n'; } int main() { std::vector<int> c{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; print_container(c); c.erase(c.begin()); print_container(c); c.erase(c.begin() + 2, c.begin() + 5); print_container(c); // 모든 짝수 삭제 for (std::vector<int>::iterator it = c.begin(); it != c.end();) { if (*it % 2 == 0) it = c.erase(it); else ++it; } print_container(c); }
출력:
0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 6 7 8 9 1 7 9
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 151 | C++98 |
first
역참조 가능해야 했으며,
이로 인해 빈
vector
를 지우는 동작이
정의되지 않음 |
요구되지 않음
first == last 인 경우 |
| LWG 414 | C++98 | 삭제 지점의 반복자가 무효화되지 않음 | 해당 반복자들도 무효화됨 |
참고 항목
|
특정 조건을 만족하는 모든 요소를 삭제함
(함수 템플릿) |
|
|
내용을 비움
(public 멤버 함수) |