首页 > 后端开发 > C++ > std::vector 元素是否保证在内存中连续?

std::vector 元素是否保证在内存中连续?

DDD
发布: 2024-12-26 05:35:38
原创
777 人浏览过

Are std::vector Elements Guaranteed to Be Contiguous in Memory?

我可以将 std::vector 元素视为连续数组吗?

问题是 std::vector 中的元素是否得到保证占用连续的内存地址,允许我们将其指向第一个元素的指针视为C 数组。

历史背景:

在 C 98 标准中,不存在这种保证。尽管如此,标准对 std::vector 的要求使得元素不太可能是不连续的。

当前标准:

但是,这个问题在C 0x(后更名为 C 11)标准。根据修订 C 98 标准的 TR:“向量的元素是连续存储的”。这意味着对于 bool 类型以外的向量,以下情况成立:

&v[n] == &v[0] + n
登录后复制

其中:

  • v 是向量
  • n 是0 和 v.size() 之间的索引 - 1

示例:

因此,以下代码现在有效并且将按预期运行:

std::vector<int> values;
// ... fill up values

if( !values.empty() )
{
    int *array = &values[0];
    for( int i = 0; i < values.size(); ++i )
    {
        int v = array[i];
        // do something with 'v'
    }
}
登录后复制

以上是std::vector 元素是否保证在内存中连续?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板