#include <vector>
#include <iostream>
#include <iterator>
using std:: cout ; using std:: endl ;
using std:: ostream ; using std:: vector ;
class Integer {
public :
Integer( ) {
cout << "C " << this << " default" << endl;
x = - 1 ; // default value
}
~Integer( ) {
cout << "D " << this << endl;
x = - 5 ; // destructed value. Not 0 so we can clearly see it
}
Integer( int r) {
cout << "C " << this << " value " << r << endl;
x = r;
}
Integer( const Integer& other) {
cout << "C " << this << " copy from " << & other << endl;
x = other.x ;
}
Integer operator= ( const Integer& other) {
cout << "A " << this << " copy from " << & other << endl;
x = other.x ;
return * this ;
}
operator int ( ) const {
return x;
}
friend ostream& operator<< ( ostream& os, const Integer& thing) {
os << thing.x ;
return os;
}
private :
int x;
} ;
ostream& operator<< ( ostream& os, const vector< Integer> & v) {
std:: copy ( v.begin ( ) , v.end ( ) , std:: ostream_iterator < Integer> ( os, ", " ) ) ;
return os;
}
int main( ) {
std:: vector < Integer> ret { 18 , 7 , 4 , 24 ,11 } ;
cout << "Before: " << ret << endl;
cout << " ret[0] is at " << & ret[ 0 ] << endl;
ret.insert ( ret.begin ( ) + 1 , ret[ 2 ] ) ;
cout << "After: " << ret << endl;
cout << " ret[0] is at " << & ret[ 0 ] << endl;
return 0 ;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aXRlcmF0b3I+CgoKdXNpbmcgc3RkOjpjb3V0OyAgICB1c2luZyBzdGQ6OmVuZGw7CnVzaW5nIHN0ZDo6b3N0cmVhbTsgdXNpbmcgc3RkOjp2ZWN0b3I7CgoKY2xhc3MgSW50ZWdlciB7CgpwdWJsaWM6CiAgICBJbnRlZ2VyKCkgewogICAgCWNvdXQgPDwgIkMgIiA8PCB0aGlzIDw8ICIgZGVmYXVsdCIgPDwgZW5kbDsKICAgICAgICB4ID0gLTE7ICAgICAvLyBkZWZhdWx0IHZhbHVlCiAgICB9CgogICAgfkludGVnZXIoKSB7CiAgICAJY291dCA8PCAiRCAiIDw8IHRoaXMgPDwgZW5kbDsKICAgICAgICB4ID0gLTU7ICAgICAvLyBkZXN0cnVjdGVkIHZhbHVlLiBOb3QgMCBzbyB3ZSBjYW4gY2xlYXJseSBzZWUgaXQKICAgIH0KCiAgICBJbnRlZ2VyKGludCByKSB7CiAgICAJY291dCA8PCAiQyAiIDw8IHRoaXMgPDwgIiB2YWx1ZSAiIDw8IHIgPDwgZW5kbDsKICAgICAgICB4ID0gcjsKICAgIH0KCiAgICBJbnRlZ2VyKGNvbnN0IEludGVnZXImIG90aGVyKSB7CiAgICAJY291dCA8PCAiQyAiIDw8IHRoaXMgPDwgIiBjb3B5IGZyb20gIiA8PCAmb3RoZXIgPDwgZW5kbDsKICAgICAgICB4ID0gb3RoZXIueDsKICAgIH0KCiAgICBJbnRlZ2VyIG9wZXJhdG9yPShjb25zdCBJbnRlZ2VyJiBvdGhlcikgewogICAgCWNvdXQgPDwgIkEgIiA8PCB0aGlzIDw8ICIgY29weSBmcm9tICIgPDwgJm90aGVyIDw8IGVuZGw7CiAgICAgICAgeCA9IG90aGVyLng7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICAgIG9wZXJhdG9yIGludCgpIGNvbnN0ewogICAgICAgIHJldHVybiB4OwogICAgfQoKICAgIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mIG9zLCBjb25zdCBJbnRlZ2VyJiB0aGluZykgewogICAgICAgIG9zIDw8IHRoaW5nLng7CiAgICAgICAgcmV0dXJuIG9zOwogICAgfQoKcHJpdmF0ZToKICAgIGludCB4Owp9OwoKCm9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIGNvbnN0IHZlY3RvcjxJbnRlZ2VyPiAmdikgewogICAgc3RkOjpjb3B5KHYuYmVnaW4oKSwgdi5lbmQoKSwgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPEludGVnZXI+KG9zLCAiLCAiKSk7CiAgICByZXR1cm4gb3M7Cn0KCmludCBtYWluKCkgewogICAgc3RkOjp2ZWN0b3I8SW50ZWdlcj4gcmV0IHsxOCwgNywgNCwgMjQsMTF9OwogICAgY291dCA8PCAiQmVmb3JlOiAiIDw8IHJldCA8PCBlbmRsOwogICAgY291dCA8PCAiICByZXRbMF0gaXMgYXQgIiA8PCAmcmV0WzBdIDw8IGVuZGw7CiAgICByZXQuaW5zZXJ0KHJldC5iZWdpbigpICsgMSwgcmV0WzJdKTsKICAgIGNvdXQgPDwgIkFmdGVyOiAiIDw8ICByZXQgPDwgZW5kbDsKICAgIGNvdXQgPDwgIiAgcmV0WzBdIGlzIGF0ICIgPDwgJnJldFswXSA8PCBlbmRsOwogICAgcmV0dXJuIDA7Cn0=
stdout
C 0x7ffd390c9a10 value 18
C 0x7ffd390c9a14 value 7
C 0x7ffd390c9a18 value 4
C 0x7ffd390c9a1c value 24
C 0x7ffd390c9a20 value 11
C 0x2add27a0ec30 copy from 0x7ffd390c9a10
C 0x2add27a0ec34 copy from 0x7ffd390c9a14
C 0x2add27a0ec38 copy from 0x7ffd390c9a18
C 0x2add27a0ec3c copy from 0x7ffd390c9a1c
C 0x2add27a0ec40 copy from 0x7ffd390c9a20
D 0x7ffd390c9a20
D 0x7ffd390c9a1c
D 0x7ffd390c9a18
D 0x7ffd390c9a14
D 0x7ffd390c9a10
Before: 18, 7, 4, 24, 11,
ret[0] is at 0x2add27a0ec30
C 0x2add27a0ec54 copy from 0x2add27a0ec38
C 0x2add27a0ec50 copy from 0x2add27a0ec30
C 0x2add27a0ec58 copy from 0x2add27a0ec34
C 0x2add27a0ec5c copy from 0x2add27a0ec38
C 0x2add27a0ec60 copy from 0x2add27a0ec3c
C 0x2add27a0ec64 copy from 0x2add27a0ec40
D 0x2add27a0ec30
D 0x2add27a0ec34
D 0x2add27a0ec38
D 0x2add27a0ec3c
D 0x2add27a0ec40
After: 18, 4, 7, 4, 24, 11,
ret[0] is at 0x2add27a0ec50
D 0x2add27a0ec50
D 0x2add27a0ec54
D 0x2add27a0ec58
D 0x2add27a0ec5c
D 0x2add27a0ec60
D 0x2add27a0ec64