this is a learning question for me and hopefully others as well. My problem breaks down to having a pointer pointing to content of a vector. The issue occurs when I erase the first element of the vector. I'm not quite sure what I was expecting, I somehow assumed that, when removing items, the vector would not start moving objects in memory. 

The question I have is: is there a way to keep the objects in place in memory? For example changing the underlying container of vector? With my particular example, I will remove the pointer access and just use and id for the object since the class needs a ID anyway.

here is a simplified example:

```cpp
#include <iostream>
#include <vector>

class A
{
public:
    A(unsigned int id) : id(id) {};
    unsigned int id;
};

int main()
{
    std::vector<A> aList;

    aList.push_back(A(1));
    aList.push_back(A(2));

    A * ptr1 = &aList[0];
    A * ptr2 = &aList[1];

    aList.erase(aList.begin());

    std::cout << "Pointer 1 points to \t" << ptr1 << " with content " << ptr1->id << std::endl;
    std::cout << "Pointer 2 points to \t" << ptr2 << " with content " << ptr2->id << std::endl;
    std::cout << "Element 1 is stored at \t" << &aList[0] << " with content " << aList[0].id << std::endl;

}

```

What I get is:

```
Pointer 1 points to     0xf69320 with content 2
Pointer 2 points to     0xf69324 with content 2
Element 1 is stored at  0xf69320 with content 2

```