我可以将 std::vector 元素视为连续数组吗?
问题是 std::vector 中的元素是否得到保证占用连续的内存地址,允许我们将其指向第一个元素的指针视为C 数组。
历史背景:
在 C 98 标准中,不存在这种保证。尽管如此,标准对 std::vector 的要求使得元素不太可能是不连续的。
当前标准:
但是,这个问题在C 0x(后更名为 C 11)标准。根据修订 C 98 标准的 TR:“向量的元素是连续存储的”。这意味着对于 bool 类型以外的向量,以下情况成立:
&v[n] == &v[0] + n
其中:
示例:
因此,以下代码现在有效并且将按预期运行:
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中文网其他相关文章!