#include <iostream>
#include <memory>
#include <string>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
vector<uint8_t> v0({'h', 'e', 'l', 'l', 'o' });
vector<uint8_t> v1;
// pointer to the data
// portion of the vector
uint8_t* p0 = v0.data();
uint8_t* p1 = v1.data();
// for stdout
string s0(v0.begin(), v0.end());
string s1(v1.begin(), v1.end());
cout << "s0='" << s0 << "' addr=" << &p0 << endl;
cout << "s1='" << s1 << "' addr=" << &p1 <<endl;
/// here i would think the pointer to the data in v1
/// would point to v0 and the pointer to the data in v0
/// would be something else.
v1 = move(v0);
p0 = v0.data();
p1 = v1.data();
s0.assign(v0.begin(), v0.end());
s1.assign(v1.begin(), v1.end());
cout << "s0='" << s0 << "' addr=" << (void *)p0 << endl;
cout << "s1='" << s1 << "' addr=" << (char *)p1 << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCnsKICB2ZWN0b3I8dWludDhfdD4gdjAoeydoJywgJ2UnLCAnbCcsICdsJywgJ28nIH0pOwogIHZlY3Rvcjx1aW50OF90PiB2MTsKCiAgLy8gcG9pbnRlciB0byB0aGUgZGF0YQogIC8vIHBvcnRpb24gb2YgdGhlIHZlY3RvcgogIHVpbnQ4X3QqIHAwID0gdjAuZGF0YSgpOwogIHVpbnQ4X3QqIHAxID0gdjEuZGF0YSgpOwoKICAvLyBmb3Igc3Rkb3V0CiAgc3RyaW5nIHMwKHYwLmJlZ2luKCksIHYwLmVuZCgpKTsKICBzdHJpbmcgczEodjEuYmVnaW4oKSwgdjEuZW5kKCkpOwoKICBjb3V0IDw8ICJzMD0nIiA8PCBzMCA8PCAiJyBhZGRyPSIgPDwgJnAwIDw8IGVuZGw7CiAgY291dCA8PCAiczE9JyIgPDwgczEgPDwgIicgYWRkcj0iIDw8ICZwMSA8PGVuZGw7CgogIC8vLyBoZXJlIGkgd291bGQgdGhpbmsgdGhlIHBvaW50ZXIgdG8gdGhlIGRhdGEgaW4gdjEKICAvLy8gd291bGQgcG9pbnQgdG8gdjAgYW5kIHRoZSBwb2ludGVyIHRvIHRoZSBkYXRhIGluIHYwCiAgLy8vIHdvdWxkIGJlIHNvbWV0aGluZyBlbHNlLgogIHYxID0gbW92ZSh2MCk7CgogIHAwID0gdjAuZGF0YSgpOwogIHAxID0gdjEuZGF0YSgpOwogIAogIHMwLmFzc2lnbih2MC5iZWdpbigpLCB2MC5lbmQoKSk7CiAgczEuYXNzaWduKHYxLmJlZ2luKCksIHYxLmVuZCgpKTsKCiAgY291dCA8PCAiczA9JyIgPDwgczAgPDwgIicgYWRkcj0iIDw8ICh2b2lkICopcDAgPDwgZW5kbDsKICBjb3V0IDw8ICJzMT0nIiA8PCBzMSA8PCAiJyBhZGRyPSIgPDwgKGNoYXIgKilwMSA8PCBlbmRsOyAgCn0K