For this piece of code I am using the data() method of the vector to access its elements:
#include <iostream>
#include <vector>
int main ()
{
std::vector<int> myvector (5);
int* p = myvector.data();
*p = 10;
++p;
*p = 20;
p[2] = 100;
std::cout << "myvector contains:";
for (unsigned i=0; i<myvector.size(); ++i)
std::cout << ' ' << myvector[i];
std::cout << '\n';
return 0;
}
Which generates
myvector contains: 10 20 0 100 0
The question is why p[2] is 0? Assuming myvector.data() is a pointer to the first element (index 0), then p[0] is 10 which fine. ++p points to the next element which is p[1] and that is 20 which is also fine. Now, p[2] is the next element after p[1]. So, the sequence should be 10 20 100. Whats is the mistake here?
You incremented
pby 1 and then wrote intop[2], which effectively now ismyvector[3].Writing to
p[1]would write to the field adjacent to*p.