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 &v[n] == &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中文网其他相关文章!