#include <bits/stdc++.h>
using namespace std;
using namespace chrono;
constexpr int SIZE = 100000;
constexpr int TIMES = 10000;
struct Type {
int r, g, b;
};
int main() {
vector<Type> v1( SIZE );
vector<Type> v2( v1 );
for( int i = TIMES; i--; ) {
copy( v1.begin(), v1.end(), v2.begin() );
}
auto t2 = steady_clock::now();
for( int i = TIMES; i--; ) {
copy( v1.begin(), v1.end(), v2.begin() );
}
cout << "std::copy: ";
cout << duration_cast<milliseconds>( steady_clock::now() - t2 ).count() << endl;
auto t1 = steady_clock::now();
for( int i = TIMES; i--; ) {
memcpy( v2.data(), v1.data(), v1.size() * sizeof( Type ) );
}
cout << "memcpy: ";
cout << duration_cast<milliseconds>( steady_clock::now() - t1 ).count() << endl;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIG5hbWVzcGFjZSBjaHJvbm87Cgpjb25zdGV4cHIgaW50IFNJWkUgPSAxMDAwMDA7CmNvbnN0ZXhwciBpbnQgVElNRVMgPSAxMDAwMDsKCnN0cnVjdCBUeXBlIHsKCWludCByLCBnLCBiOwp9OwoKaW50IG1haW4oKSB7Cgl2ZWN0b3I8VHlwZT4gdjEoIFNJWkUgKTsKCXZlY3RvcjxUeXBlPiB2MiggdjEgKTsKCQoJZm9yKCBpbnQgaSA9IFRJTUVTOyBpLS07ICkgewoJCWNvcHkoIHYxLmJlZ2luKCksIHYxLmVuZCgpLCB2Mi5iZWdpbigpICk7Cgl9CgkKCWF1dG8gdDIgPSBzdGVhZHlfY2xvY2s6Om5vdygpOwoJZm9yKCBpbnQgaSA9IFRJTUVTOyBpLS07ICkgewoJCWNvcHkoIHYxLmJlZ2luKCksIHYxLmVuZCgpLCB2Mi5iZWdpbigpICk7Cgl9Cgljb3V0IDw8ICJzdGQ6OmNvcHk6ICI7Cgljb3V0IDw8IGR1cmF0aW9uX2Nhc3Q8bWlsbGlzZWNvbmRzPiggc3RlYWR5X2Nsb2NrOjpub3coKSAtIHQyICkuY291bnQoKSA8PCBlbmRsOwoJCglhdXRvIHQxID0gc3RlYWR5X2Nsb2NrOjpub3coKTsKCWZvciggaW50IGkgPSBUSU1FUzsgaS0tOyApIHsKCQltZW1jcHkoIHYyLmRhdGEoKSwgdjEuZGF0YSgpLCB2MS5zaXplKCkgKiBzaXplb2YoIFR5cGUgKSApOwoJfQoJY291dCA8PCAibWVtY3B5OiAiOwoJY291dCA8PCBkdXJhdGlvbl9jYXN0PG1pbGxpc2Vjb25kcz4oIHN0ZWFkeV9jbG9jazo6bm93KCkgLSB0MSApLmNvdW50KCkgPDwgZW5kbDsKfQ==