#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
class A
{
public :
A( const char * str)
{
cptr = new char [ strlen ( str) ] ;
strcpy ( cptr,str) ;
cout << "A(const char *str) called and cptr is " << cptr<< endl;
}
A( const A & a)
{
cptr = new char [ strlen ( a.cptr ) + 1 ] ;
strcpy ( this- > cptr,a.cptr ) ;
cout << "A(const A &a) called and cptr is " << cptr<< endl;
}
~A( )
{
cout << "~A() called and cptr is " << cptr<< endl;
delete [ ] cptr;
}
char * cptr;
} ;
int main( )
{
A a1( "1" ) ,a2( "2" ) ,a3( "3" ) ;
vector< A> Avec;
Avec.reserve ( 256 ) ;
Avec.push_back ( a1) ;
Avec.push_back ( a2) ;
Avec.push_back ( a3) ;
vector< A> :: iterator iter;
for ( iter = Avec.begin ( ) ; iter! = Avec.end ( ) ; )
{
if ( strcmp ( ( * iter) .cptr ,"1" ) == 0 )
{
cout << "before erase" << endl;
iter = Avec.erase ( iter) ;
cout << "after erase" << endl;
}
else
{
++ iter;
}
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y3N0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIEEKewpwdWJsaWM6CiAgICBBKGNvbnN0IGNoYXIgKnN0cikKICAgIHsKICAgICAgICBjcHRyID0gbmV3IGNoYXIgW3N0cmxlbihzdHIpXTsKICAgICAgICBzdHJjcHkoY3B0cixzdHIpOwogICAgICAgIGNvdXQ8PCJBKGNvbnN0IGNoYXIgKnN0cikgY2FsbGVkIGFuZCBjcHRyIGlzICI8PGNwdHI8PGVuZGw7CiAgICB9CiAgICBBKGNvbnN0IEEgJmEpCiAgICB7CiAgICAgICAgY3B0ciA9IG5ldyBjaGFyIFtzdHJsZW4oYS5jcHRyKSsxXTsKICAgICAgICBzdHJjcHkodGhpcy0+Y3B0cixhLmNwdHIpOwogICAgICAgIGNvdXQ8PCJBKGNvbnN0IEEgJmEpIGNhbGxlZCBhbmQgY3B0ciBpcyAiPDxjcHRyPDxlbmRsOwogICAgfQogICAgfkEoKQogICAgewogICAgICAgIGNvdXQ8PCJ+QSgpIGNhbGxlZCBhbmQgY3B0ciBpcyAiPDxjcHRyPDxlbmRsOwogICAgICAgIGRlbGV0ZSBbXSBjcHRyOwogICAgfQoKICAgIGNoYXIgKmNwdHI7Cn07CgppbnQgbWFpbigpCnsKICAgIEEgYTEoIjEiKSxhMigiMiIpLGEzKCIzIik7CiAgICB2ZWN0b3I8QT4gQXZlYzsKICAgIEF2ZWMucmVzZXJ2ZSgyNTYpOwoKICAgIEF2ZWMucHVzaF9iYWNrKGExKTsKICAgIEF2ZWMucHVzaF9iYWNrKGEyKTsKICAgIEF2ZWMucHVzaF9iYWNrKGEzKTsKCiAgICB2ZWN0b3I8QT46Oml0ZXJhdG9yIGl0ZXI7CiAgICBmb3IoaXRlciA9IEF2ZWMuYmVnaW4oKTsgaXRlciE9QXZlYy5lbmQoKTsgKQogICAgewogICAgICAgIGlmKHN0cmNtcCgoKml0ZXIpLmNwdHIsIjEiKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgICAgY291dDw8ImJlZm9yZSBlcmFzZSI8PGVuZGw7CiAgICAgICAgICAgIGl0ZXIgPSBBdmVjLmVyYXNlKGl0ZXIpOwogICAgICAgICAgICBjb3V0PDwiYWZ0ZXIgZXJhc2UiPDxlbmRsOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgfQogICAgfQp9