使用list的时候想到一个问题,众所周知,list的每个元素都存储着指向它和它指向的内存地址(类似于指针),因为它并不是连续的需要一整个内存块,而是在你每新增一个元素,它会自己安排一个合适的内存地址来储存,我在这里想的是,如果我删除一个元素,并在相同位置新增一个元素,内存地址是否会变。
实施
std::list<int> list = { 1,2,3,4,5,6,7,8,9 };
std::cout <<"begin address:"<< & (*list.begin()) << std::endl;
int* address_second = &(*std::next(list.begin(), 1));
std::cout << "second address: " << address_second << std::endl;
int* end_address = &list.back() + 1;
std::cout <<"end address: "<< end_address << std::endl;
auto it = std::next(list.begin(), 1);
list.erase(it);
list.insert(std::next(list.begin()),1);
address_second = &(*std::next(list.begin(), 1));
std::cout << "second address after: " << address_second << std::endl;
很简陋的一段代码,本质上就是删掉第二个元素,再新增第二个元素。
结果
结果显而易见,虽然都是该list的第二个元素,但是内存地址是不一样的,具体list是如何安排这个具体的内存地址的值,先埋个坑。