#include <iostream>
#include <vector>
#include <chrono>
#include <array>
using namespace std;
struct float2
{
float x, y ;
};
float2 make_float2(float x, float y) {
return float2{x, y};
}
void originalMethod() {
std::vector<std::vector<float>> pts;
for (int val = 0; val < 10000; ++val) {
std::vector<float> p1{float(val),float(val+1)};
pts.push_back(p1);
}
auto start = chrono::steady_clock::now();
std::vector<float2> lattice;
lattice.reserve(pts.size());
for (auto p : pts){
lattice.emplace_back(make_float2(p[0],p[1]));
}
auto end = chrono::steady_clock::now();
auto diff = end - start;
cout << chrono::duration <double, nano> (diff).count() << " ns" << endl;
}
void newMethod() {
std::vector<std::array<float, 2>> pts;
for (int val = 0; val < 10000; ++val) {
std::array<float, 2> p1{float(val),float(val+1)};
pts.push_back(p1);
}
auto start = chrono::steady_clock::now();
std::vector<float2> lattice;
for (auto p : pts){
if (p.size() == 2) {
float2 p_ = make_float2(p[0],p[1]);
lattice.push_back(p_);
}
}
auto end = chrono::steady_clock::now();
auto diff = end - start;
cout << chrono::duration <double, nano> (diff).count() << " ns" << endl;
}
int main() {
originalMethod();
newMethod();
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y2hyb25vPgojaW5jbHVkZSA8YXJyYXk+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKc3RydWN0ICBmbG9hdDIKewogICAgZmxvYXQgeCwgeSA7Cn07CgpmbG9hdDIgbWFrZV9mbG9hdDIoZmxvYXQgeCwgZmxvYXQgeSkgewoJCglyZXR1cm4gZmxvYXQye3gsIHl9OwoJCn0KCnZvaWQgb3JpZ2luYWxNZXRob2QoKSB7CgkJc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8ZmxvYXQ+PiBwdHM7Cglmb3IgKGludCB2YWwgPSAwOyB2YWwgPCAxMDAwMDsgKyt2YWwpIHsKCQlzdGQ6OnZlY3RvcjxmbG9hdD4gcDF7ZmxvYXQodmFsKSxmbG9hdCh2YWwrMSl9OwoJCXB0cy5wdXNoX2JhY2socDEpOwoJfQoJCglhdXRvIHN0YXJ0ID0gY2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwoJc3RkOjp2ZWN0b3I8ZmxvYXQyPiBsYXR0aWNlOwoJbGF0dGljZS5yZXNlcnZlKHB0cy5zaXplKCkpOwoJZm9yIChhdXRvIHAgOiBwdHMpewogICAgICAgICAgICAgICAgbGF0dGljZS5lbXBsYWNlX2JhY2sobWFrZV9mbG9hdDIocFswXSxwWzFdKSk7CiAgICAgICAgICAgIH0KCWF1dG8gZW5kID0gY2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwoJYXV0byBkaWZmID0gZW5kIC0gc3RhcnQ7Cgljb3V0IDw8IGNocm9ubzo6ZHVyYXRpb24gPGRvdWJsZSwgbmFubz4gKGRpZmYpLmNvdW50KCkgPDwgIiBucyIgPDwgZW5kbDsKfQoKdm9pZCBuZXdNZXRob2QoKSB7CglzdGQ6OnZlY3RvcjxzdGQ6OmFycmF5PGZsb2F0LCAyPj4gcHRzOwoJZm9yIChpbnQgdmFsID0gMDsgdmFsIDwgMTAwMDA7ICsrdmFsKSB7CgkJc3RkOjphcnJheTxmbG9hdCwgMj4gcDF7ZmxvYXQodmFsKSxmbG9hdCh2YWwrMSl9OwoJCXB0cy5wdXNoX2JhY2socDEpOwoJfQoJCglhdXRvIHN0YXJ0ID0gY2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpOwoJc3RkOjp2ZWN0b3I8ZmxvYXQyPiBsYXR0aWNlOwoJZm9yIChhdXRvIHAgOiBwdHMpewoJICAgIGlmIChwLnNpemUoKSA9PSAyKSB7CiAgICAgICAgICAgIAlmbG9hdDIgcF8gPSBtYWtlX2Zsb2F0MihwWzBdLHBbMV0pOwogICAgICAgICAgICAJbGF0dGljZS5wdXNoX2JhY2socF8pOwoJICAgIH0KCgl9CglhdXRvIGVuZCA9IGNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKTsKCWF1dG8gZGlmZiA9IGVuZCAtIHN0YXJ0OwoJY291dCA8PCBjaHJvbm86OmR1cmF0aW9uIDxkb3VibGUsIG5hbm8+IChkaWZmKS5jb3VudCgpIDw8ICIgbnMiIDw8IGVuZGw7Cn0KCgppbnQgbWFpbigpIHsKCQoJb3JpZ2luYWxNZXRob2QoKTsKCW5ld01ldGhvZCgpOwoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJcmV0dXJuIDA7Cn0=