std::deque<T,Allocator>:: erase
| (1) | ||
|
iterator erase
(
iterator pos
)
;
|
(C++11 이전) | |
|
iterator erase
(
const_iterator pos
)
;
|
(C++11 이후)
(constexpr C++26 이후) |
|
| (2) | ||
|
iterator erase
(
iterator first, iterator last
)
;
|
(C++11 이전) | |
|
iterator erase
(
const_iterator first, const_iterator last
)
;
|
(C++11 이후)
(constexpr C++26 이후) |
|
컨테이너에서 지정된 요소들을 삭제합니다.
[
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 <deque> #include <iostream> void print_container(const std::deque<int>& c) { for (int i : c) std::cout << i << ' '; std::cout << '\n'; } int main() { std::deque<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::deque<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
역참조 가능해야 했으며,
이로 인해 빈
deque
를 비우는 동작이
정의되지 않음 |
다음 경우에는 요구되지 않음
first == last |
| LWG 638 | C++98 | past-the-end 반복자가 무효화되지 않았음 |
요소가 중간이나 끝에서 삭제될 경우
무효화됨 |
참고 항목
|
특정 조건을 만족하는 모든 요소를 삭제함
(함수 템플릿) |
|
|
내용을 비움
(public 멤버 함수) |