![]() |
1
69
大致看起来是这样的(请原谅我的绘画杰作):
这个
新建缓冲区 将被分配到堆的其他地方,并且所有以前的元素都将被移到新的元素中。因此,他们的地址将会改变。
大致来说,是的。元素的迭代器和地址稳定性由
|
![]() |
2
14
它是一个单一的连续存储器(1d阵列)。 每次它的容量耗尽时,它就会被重新分配,存储的对象会被移动到新的更大的地方——这就是为什么您会观察到存储对象的地址在变化。
存储正在增长
几何学
在大多数实际应用程序中,通常需要将它预先分配给至少32个元素,以跳过紧随其后的前几个重新分配(0→1→2→4→8→16)。 帽 =上限 n ),或在某个合理的较大大小后完全停止,以确保应用程序不会浪费或耗尽内存。
|
![]() |
3
7
然而,对向量的许多操作可以重新定位整个内存。 一种常见的情况是,当您向其中添加元素时,向量必须增长,它可以将所有元素重新分配并复制到另一个连续的内存块中。 |
![]() |
4
5
这正是它的工作原理,也是为什么当重新分配发生时,附加元素确实会使所有迭代器以及内存位置失效。这不仅是有效的,因为C++ 17,它一直以来的情况。 这种方法有几个好处:
|
![]() |
5
2
就实际结构而言
Relevant code snippet from the
打印内存的原始内容
|
![]() |
6
-2
当你在两个向量之间循环时。它们将输出相同的值。 |
![]() |
AstralHex · 矩阵乘法代码工作不正常 6 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 6 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 6 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 6 月前 |