首页 >后端开发 >C++ >调整大小后,STL 向量元素在内存中是否保持连续?

调整大小后,STL 向量元素在内存中是否保持连续?

Susan Sarandon
Susan Sarandon原创
2024-11-16 07:26:03581浏览

Do STL Vector Elements Remain Consecutive in Memory After Resizing?

STL 向量元素的存储连续性

使用 STL 向量时,了解其元素的内存布局至关重要。出现一个常见问题:如果向量已调整大小,我们可以安全地假设其元素连续存储在内存中吗?

分析

C 03 标准 (23.2 .4.1) 提供了答案:

The elements of a vector are stored contiguously, meaning that if v is a vector where T is some
type other than bool, then it obeys the identity &amp;v[n] == &amp;v[0] + n for all 0 <= n < v.size().

简单来说,这意味着向量的第一个元素 (&v[0]) 等于其第 n 个元素 (&v[n]) 的地址加上 n 的偏移量。这适用于包含布尔值以外的数据类型的向量。

示例

考虑以下代码:

vector<char> vc(100);
// do some stuff with vc
vc.resize(200);
char* p = &vc[0];
// do stuff with *p

根据标准,我们可以放心地假设,调整向量大小后,存储在 p 中的地址将提供对向量的所有 200 个元素的连续访问矢量。这是因为向量的元素保证被依次存储在内存中,从而实现高效的遍历和访问。

注意

但是,这一点很重要需要注意的是,当向向量添加元素时,其存储可能会被重新分配。这可能会使指向向量元素的任何现有指针或迭代器无效,因此在使用向量时必须考虑到这一点。

以上是调整大小后,STL 向量元素在内存中是否保持连续?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn