二维vector的内存分配
新的改变
第一次写博客,难免比较粗糙。我也是一个非科班的,今年才开始学c++,问题很多,写的疏漏也很多,希望大家能指出来,但是温柔一点,毕竟我也是个小宝贝,嘿嘿。
之前的误区
之前一直以为二维vector的在内存中是各个一维vector拼接在一起的,今天才发现是错误的。
实际情况
在内存中,二维vector的每个子vector内部是连续的,但是子vector之间是非连续的。且vector[0]和vector[0][0]地址都是不同的。
我用vs2019进行测试的,我把一个二维数组插入了元素,然后输出每个元素的地址,结果如图
可以看到每个子vector是分配在不同的内存处,所以,二维vector初始的时候不需要指出行和列的范围,并且每一行的长度可以不同。每一行的数据增长也不会影响到别的行。因此在第i行前插入元素,不会导致像一维vector那样子,需要第i行后面的子vector元素都进行移动。当然,在某一行的某个元素前插入新数据,需要该行该元素后的元素进行移