Namespaces
Variants

std::inplace_vector<T,N>:: erase

From cppreference.net

constexpr iterator erase ( const_iterator pos ) ;
(1) (C++26부터)
constexpr iterator erase ( const_iterator first, const_iterator last ) ;
(2) (C++26부터)

컨테이너에서 지정된 요소들을 삭제합니다.

1) pos 위치의 요소를 제거합니다.
2) 범위 내의 요소들을 제거합니다 [ first , last ) .

반복자( end() 반복자 포함) 및 삭제 지점 또는 그 이후의 요소에 대한 참조는 무효화됩니다.

반복자 pos 는 유효하고 역참조 가능해야 합니다. 따라서 end() 반복자(유효하지만 역참조 불가능한)는 pos 의 값으로 사용할 수 없습니다.

반복자 first 는 역참조 가능할 필요가 없습니다 만약 first == last 인 경우: 빈 범위를 삭제하는 것은 아무 작업도 수행하지 않습니다.

목차

매개변수

pos - 제거할 요소를 가리키는 반복자
first, last - 제거할 요소들의 범위 를 정의하는 한 쌍의 반복자
타입 요구사항
-
만약 T MoveAssignable 이 아니라면, 동작은 정의되지 않습니다.

반환값

제거된 마지막 요소 다음의 반복자.

1) 만약 pos 가 마지막 요소를 참조하는 경우, end() 반복자가 반환됩니다.
2) 제거 전에 last == end ( ) 인 경우, 갱신된 end() 반복자가 반환됩니다.
만약 [ first , last ) 범위가 비어 있다면, last 가 반환됩니다.

예외

T 의 할당 연산자에서 예외가 발생하지 않는 한 예외를 던지지 않습니다.

복잡도

선형: T 의 소멸자 호출 횟수는 삭제된 요소 수와 동일하며, T 의 할당 연산자는 삭제된 요소 이후 벡터에 남아있는 요소 수만큼 호출됩니다.

참고 사항

컨테이너 요소를 조건자(predicate)에 기반하여 삭제해야 할 때, 컨테이너를 순회하며 단항 erase 를 호출하는 대신, 일반적으로 반복자 범위 오버로드를 std::remove()/std::remove_if() 와 함께 사용하여 남아있는(삭제되지 않은) 요소의 이동 횟수를 최소화합니다 — 이것이 erase-remove 관용구입니다. std::erase_if() 는 erase-remove 관용구를 대체합니다.

예제

#include <inplace_vector>
#include <print>
int main()
{
    std::inplace_vector<int, 10> v{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    std::println("{}", v);
    v.erase(v.begin());
    std::println("{}", v);
    v.erase(v.begin() + 2, v.begin() + 5);
    std::println("{}", v);
    // 모든 짝수 삭제
    for (std::inplace_vector<int, 10>::iterator it{v.begin()}; it != v.end();)
        if (*it % 2 == 0)
            it = v.erase(it);
        else
            ++it;
    std::println("{}", v);
}

출력:

[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]

참고 항목

특정 조건을 만족하는 모든 요소를 삭제함
(함수 템플릿)
내용을 비움
(public member function)