#include <iostream>
#include <vector>
#include <cstdlib>
#include <chrono>
using namespace std;
#define MAXN 100000000
class timer
{
using T = std::chrono::time_point<std::chrono::steady_clock>;
T t1, t2;
public:
void start() { t1 = std::chrono::steady_clock::now(); }
void stop() { t2 = std::chrono::steady_clock::now(); }
void print(const char *title) const { std::cout << title << (t2 - t1).count() << endl; }
};
int main()
{
vector <unsigned> v(MAXN);
unsigned s;
timer t;
srand(time(0));
s = 0;
for (unsigned q=0; q<MAXN; ++q) v[q] = rand();
t.start();
for (unsigned q=0, n=v.size(); q<n; ++q) s += v[q];
t.stop();
cout << s << endl;
t.print("Index: ");
s = 0;
for (unsigned q=0; q<MAXN; ++q) v[q] = rand();
t.start();
for (auto x : v) s += x;
t.stop();
cout << s << endl;
t.print("Byval: ");
s = 0;
for (unsigned q=0; q<MAXN; ++q) v[q] = rand();
t.start();
for (auto &x : v) s += x;
t.stop();
cout << s << endl;
t.print("Byref: ");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGNocm9ubz4KIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBNQVhOIDEwMDAwMDAwMAoKY2xhc3MgdGltZXIKewogIHVzaW5nIFQgPSBzdGQ6OmNocm9ubzo6dGltZV9wb2ludDxzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrPjsKICBUIHQxLCB0MjsKcHVibGljOgogIHZvaWQgc3RhcnQoKSB7IHQxID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7IH0KICB2b2lkIHN0b3AoKSB7IHQyID0gc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCk7IH0KICB2b2lkIHByaW50KGNvbnN0IGNoYXIgKnRpdGxlKSBjb25zdCB7IHN0ZDo6Y291dCA8PCB0aXRsZSA8PCAodDIgLSB0MSkuY291bnQoKSA8PCBlbmRsOyB9Cn07CiAKaW50IG1haW4oKQp7CiAgdmVjdG9yIDx1bnNpZ25lZD4gdihNQVhOKTsKICB1bnNpZ25lZCBzOwogIHRpbWVyIHQ7CiAKICBzcmFuZCh0aW1lKDApKTsKIAogIHMgPSAwOwogIGZvciAodW5zaWduZWQgcT0wOyBxPE1BWE47ICsrcSkgdltxXSA9IHJhbmQoKTsKICB0LnN0YXJ0KCk7CiAgZm9yICh1bnNpZ25lZCBxPTAsIG49di5zaXplKCk7IHE8bjsgKytxKSBzICs9IHZbcV07CiAgdC5zdG9wKCk7CiAgY291dCA8PCBzIDw8IGVuZGw7CiAgdC5wcmludCgiSW5kZXg6ICIpOwogCiAgcyA9IDA7CiAgZm9yICh1bnNpZ25lZCBxPTA7IHE8TUFYTjsgKytxKSB2W3FdID0gcmFuZCgpOwogIHQuc3RhcnQoKTsKICBmb3IgKGF1dG8geCA6IHYpIHMgKz0geDsKICB0LnN0b3AoKTsKICBjb3V0IDw8IHMgPDwgZW5kbDsKICB0LnByaW50KCJCeXZhbDogIik7CiAKICBzID0gMDsKICBmb3IgKHVuc2lnbmVkIHE9MDsgcTxNQVhOOyArK3EpIHZbcV0gPSByYW5kKCk7CiAgdC5zdGFydCgpOwogIGZvciAoYXV0byAmeCA6IHYpIHMgKz0geDsKICB0LnN0b3AoKTsKICBjb3V0IDw8IHMgPDwgZW5kbDsKICB0LnByaW50KCJCeXJlZjogIik7CiAKICByZXR1cm4gMDsKfQ==