#include <iostream>
#include <vector>
using namespace std;
class Test {
public:
Test() { cout << "Test()\n"; }
Test(int x):val_(x){ cout << "Test(" << x << ")\n"; }
Test(const Test& t):val_(t.val_) { cout << "Test(const Test& " << t.val_ << ")\n"; }
Test(Test&&t) :val_(t.val_) { t.val_ = 0; cout << "Test(const Test&& " << t.val_ << ")\n"; }
Test& operator = (const Test& t) {
cout << "Test& operator = (const Test& " << t.val_ <<")\n";
val_ = t.val_;
return *this;}
Test& operator = (Test&& t) {
cout << "Test& operator = (const Test&&" << t.val_ <<")\n";
val_ = t.val_; t.val_ = 0;
return *this;}
~Test() { cout << "~Test(" << val_ <<")\n"; }
int val() const { return val_; }
private:
int val_ = 0;
};
int main(int argc, char * argv[])
{
vector<Test> t;
t.reserve(20);
for(int i = 0; i < 20; ++i)
{
t.emplace_back(i);
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIFRlc3QgewpwdWJsaWM6CiAgICBUZXN0KCkgICAgICAgICAgICAgeyBjb3V0IDw8ICJUZXN0KClcbiI7IH0KICAgIFRlc3QoaW50IHgpOnZhbF8oeCl7IGNvdXQgPDwgIlRlc3QoIiA8PCB4IDw8ICIpXG4iOyB9CiAgICBUZXN0KGNvbnN0IFRlc3QmIHQpOnZhbF8odC52YWxfKSB7IGNvdXQgPDwgIlRlc3QoY29uc3QgVGVzdCYgIiA8PCB0LnZhbF8gPDwgIilcbiI7IH0KICAgIFRlc3QoVGVzdCYmdCkgICAgICA6dmFsXyh0LnZhbF8pIHsgdC52YWxfID0gMDsgY291dCA8PCAiVGVzdChjb25zdCBUZXN0JiYgIiA8PCB0LnZhbF8gPDwgIilcbiI7IH0KICAgIFRlc3QmIG9wZXJhdG9yID0gKGNvbnN0IFRlc3QmIHQpICB7CiAgICAgICAgY291dCA8PCAiVGVzdCYgb3BlcmF0b3IgPSAoY29uc3QgVGVzdCYgIiA8PCB0LnZhbF8gPDwiKVxuIjsKICAgICAgICB2YWxfID0gdC52YWxfOwogICAgICAgIHJldHVybiAqdGhpczt9CiAgICBUZXN0JiBvcGVyYXRvciA9IChUZXN0JiYgdCkgewogICAgICAgIGNvdXQgPDwgIlRlc3QmIG9wZXJhdG9yID0gKGNvbnN0IFRlc3QmJiIgPDwgdC52YWxfIDw8IilcbiI7CiAgICAgICAgdmFsXyA9IHQudmFsXzsgdC52YWxfID0gMDsKICAgICAgICByZXR1cm4gKnRoaXM7fQogICAgflRlc3QoKSAgICAgICAgICAgeyBjb3V0IDw8ICJ+VGVzdCgiIDw8IHZhbF8gPDwiKVxuIjsgfQogICAgaW50IHZhbCgpIGNvbnN0IHsgcmV0dXJuIHZhbF87IH0KcHJpdmF0ZToKICAgIGludCB2YWxfID0gMDsKfTsKCgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqIGFyZ3ZbXSkKewogICAgdmVjdG9yPFRlc3Q+IHQ7CiAgICB0LnJlc2VydmUoMjApOwoKICAgIGZvcihpbnQgaSA9IDA7IGkgPCAyMDsgKytpKQogICAgewogICAgICAgIHQuZW1wbGFjZV9iYWNrKGkpOwogICAgfQp9Cg==