basic_string&
erase(size_type pos = 0, size_type n = npos); // (1) C++98
constexpr basic_string&
erase(size_type pos = 0, size_type n = npos); // (1) C++20
iterator erase(iterator p); // (2) C++98
iterator erase(const_iterator p); // (2) C++11
constexpr iterator erase(const_iterator p); // (2) C++20
iterator
erase(iterator first,
iterator last); // (3) C++98
iterator
erase(const_iterator first,
const_iterator last); // (3) C++11
constexpr iterator
erase(const_iterator first,
const_iterator last); // (3) C++20
æŠèŠ
èŠçŽ ãåé€ããã
- (1) :
posçªç®ããnèŠçŽ ãåé€ããã - (2) : ã€ãã¬ãŒã¿
pãæãèŠçŽ ãåé€ãã - (3) : ã€ãã¬ãŒã¿ç¯å²
[first, last)ãåé€ãã
èŠä»¶
- (1) :
pos <= size() - (3) :
firstãšlastã*thisã«å¯Ÿããæå¹ãªã€ãã¬ãŒã¿ã§ããã[first, last)ãæå¹ãªç¯å²ã§ããããšã
广
- (1) :
nãšsize() - posã®ãã¡å°ããæ¹ãxlenãšããposçªç®ããxlenåã®èŠçŽ ãåé€ããã - (2) : ã€ãã¬ãŒã¿
pãæãèŠçŽ ãåé€ããã - (3) : ã€ãã¬ãŒã¿ç¯å²
[first, last)ã®æååãåé€ããã
æ»ãå€
- (1) :
*this - (2) : åé€ããèŠçŽ ã®æ¬¡ãæãã€ãã¬ãŒã¿ãè¿ãããã®ãããªèŠçŽ ããªããã°
end()ãè¿ãã - (3) : æåŸã«åé€ããèŠçŽ ã®æ¬¡ãæãã€ãã¬ãŒã¿ãè¿ãããã®ãããªèŠçŽ ããªããã°
end()ãè¿ãã
äŸå€
- (1) :
pos > size()ã®å Žåãout_of_rangeäŸå€ãéåºããã - (2) : æããªã (C++14ãã)
- (3) : æããªã (C++14ãã)
äŸ
#include <iostream>
#include <string>
int main()
{
// (1) æå®ããäœçœ®ããNåã®èŠçŽ ãåé€ãã
{
std::string s = "12345";
// 1çªç®ãã2åã®èŠçŽ ãåé€
s.erase(1, 2);
std::cout << "(1) : " << s << std::endl;
}
// (2) æå®ããã€ãã¬ãŒã¿ãæãèŠçŽ ãåé€ãã
{
std::string s = "12345";
decltype(s)::iterator it = s.begin() + 2; // '3'ãæã
s.erase(it);
std::cout << "(2) : " << s << std::endl;
}
// (3) æå®ããã€ãã¬ãŒã¿ç¯å²ãåé€ãã
{
std::string s = "12345";
decltype(s)::iterator it = s.begin() + 2; // '3'ãæã
s.erase(it, s.end());
std::cout << "(3) : " << s << std::endl;
}
}
åºå
(1) : 145
(2) : 1245
(3) : 12
åç §
- LWG Issue 180. Container member iterator arguments constness has unintended consequences
- LWG Issue 2003. String exception inconsistency in erase.
- C++14ãã(2)ãš(3)ã«ããäŸå€ãæããªãããšããä¿èšŒã远å ãããçµç·¯ã®ã¬ããŒã
- P0980R1 Making
std::stringconstexpr