#include <iostream>
#include <vector>
void modify(std::vector<int> &v);
int main () {
std::vector<int> foo {16, 2, 77, 40, 12071};
modify(foo);
for(auto i : foo) std::cout << i << " ";
std::cout << std::endl;
return 0;
}
void modify(std::vector<int> &bar) {
// baz points to (for example) memory location 4567
std::vector<int> baz(bar.size());
// this loop can't modify my data in-place,
// so it uses baz temporarily
for(int i(0), sz(bar.size()); i < sz; ++i){
int j;
if(i == 0) j = 4;
else j = i - 1;
baz[i] = bar[i] + bar[j];
}
bar.swap(baz);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdm9pZCBtb2RpZnkoc3RkOjp2ZWN0b3I8aW50PiAmdik7CgppbnQgbWFpbiAoKSB7CiAgc3RkOjp2ZWN0b3I8aW50PiBmb28gezE2LCAyLCA3NywgNDAsIDEyMDcxfTsKCiAgbW9kaWZ5KGZvbyk7CgogIGZvcihhdXRvIGkgOiBmb28pIHN0ZDo6Y291dCA8PCBpIDw8ICIgIjsKICBzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwoKICByZXR1cm4gMDsKfQoKdm9pZCBtb2RpZnkoc3RkOjp2ZWN0b3I8aW50PiAmYmFyKSB7CiAgLy8gYmF6IHBvaW50cyB0byAoZm9yIGV4YW1wbGUpIG1lbW9yeSBsb2NhdGlvbiA0NTY3CiAgc3RkOjp2ZWN0b3I8aW50PiBiYXooYmFyLnNpemUoKSk7CgogIC8vIHRoaXMgbG9vcCBjYW4ndCBtb2RpZnkgbXkgZGF0YSBpbi1wbGFjZSwKICAvLyBzbyBpdCB1c2VzIGJheiB0ZW1wb3JhcmlseQogIGZvcihpbnQgaSgwKSwgc3ooYmFyLnNpemUoKSk7IGkgPCBzejsgKytpKXsKICAgIGludCBqOwogICAgaWYoaSA9PSAwKSBqID0gNDsKICAgIGVsc2UgaiA9IGkgLSAxOwogICAgYmF6W2ldID0gYmFyW2ldICsgYmFyW2pdOwogIH0KICBiYXIuc3dhcChiYXopOwp9