Namespaces
Variants

std::basic_string<CharT,Traits,Allocator>:: erase

From cppreference.net
std::basic_string
basic_string & erase ( size_type index = 0 , size_type count = npos ) ;
(1) (constexpr since C++20)
(2)
iterator erase ( iterator position ) ;
(until C++11)
iterator erase ( const_iterator position ) ;
(since C++11)
(constexpr since C++20)
(3)
iterator erase ( iterator first, iterator last ) ;
(until C++11)
iterator erase ( const_iterator first, const_iterator last ) ;
(since C++11)
(constexpr since C++20)

문자열에서 지정된 문자들을 제거합니다.

1) std:: min ( count, size ( ) - index ) 개의 문자를 index 위치에서부터 제거합니다.
2) position 에 있는 문자를 제거합니다.
만약 position * this 에 대한 dereferenceable iterator 가 아니라면, 동작은 정의되지 않습니다.
3) [ first , last ) 범위 내의 문자들을 제거합니다.
만약 first 또는 last 유효한 반복자 가 아니거나 [ first , last ) 유효한 범위 가 아닌 경우, 동작은 정의되지 않습니다.

목차

매개변수

index - 제거할 첫 번째 문자
count - 제거할 문자 수
position - 제거할 문자에 대한 반복자
first, last - 제거할 문자 범위

반환값

1) * this
2) 지워진 문자 바로 다음 문자를 가리키는 반복자, 또는 해당 문자가 존재하지 않을 경우 end() 입니다.
3) 삭제 전에 가리키고 있던 문자를 가리키는 반복자, 또는 해당 문자가 존재하지 않는 경우 end() 입니다.

예외

1) std::out_of_range 만약 index > size ( ) 인 경우.
2,3) 아무 것도 throw하지 않습니다.

어떤 이유로든 예외가 발생하면, 이 함수는 아무런 효과를 가지지 않습니다( strong exception safety guarantee ).

예제

#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
int main()
{
    std::string s = "This Is An Example";
    std::cout << "1) " << s << '\n';
    s.erase(7, 3); // " An"을 지움 (오버로드 (1) 사용)
    std::cout << "2) " << s << '\n';
    s.erase(std::find(s.begin(), s.end(), ' ')); // 첫 번째 공백을 지움; 오버로드 (2)
    std::cout << "3) " << s << '\n';
    s.erase(s.find(' ')); // 공백부터 문자열 끝까지 제거; 오버로드 (1)
    std::cout << "4) " << s << '\n';
    auto it = std::next(s.begin(), s.find('s')); // 첫 번째 's'에 대한 반복자 획득
    s.erase(it, std::next(it, 2)); // "sI"를 지움; 오버로드 (3)
    std::cout << "5) " << s << '\n';
}

출력:

1) This Is An Example
2) This Is Example
3) ThisIs Example
4) ThisIs
5) This

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 수정된 동작
LWG 27 C++98 오버로드 ( 3 ) 가 가리키는 마지막 문자를 지우지 않고
해당 문자 바로 다음 문자를 가리키는 반복자를 반환함
해당 문자를 가리키는
반복자를 반환함
LWG 428 C++98 오버로드 ( 2 ) 에서 position 이 유효해야 한다고 명시적으로 요구했지만
SequenceContainer 는 역참조 가능해야 함(더 엄격함)
명시적 요구사항
제거됨
LWG 847 C++98 예외 안전성 보장이 없었음 강력한 예외 안전성
보장이 추가됨

참고 항목

내용을 지움
(public member function)