【发布时间】:2010-10-25 08:26:05
【问题描述】:
我的问题很简单:std::vector 元素是否保证是连续的?换句话说,我可以将指向std::vector 的第一个元素的指针用作C 数组吗?
如果我没记错的话,C++ 标准并没有做出这样的保证。但是,std::vector 的要求是,如果元素不连续,几乎不可能满足这些要求。
有人可以澄清一下吗?
例子:
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'
}
}
【问题讨论】:
-
我知道如果你在
if块内改变values就会有麻烦。不过,我不知道你的问题的答案,所以我只是发表评论。 :) -
@Greg:什么麻烦——你能详细说明一下吗?
-
我想他的意思是推送新值可能会触发“realloc”,这会导致数组变得无效。
-
改变
values的调用,特别是改变其大小的调用(例如,push_back()),可能会提示重新分配底层向量,从而使复制到array的指针无效。这与使用 vector::iterator 而不是指向向量的指针背后的原理相同。 :) -
是的,我把 ``'s 放在值周围是为了表明我在谈论类本身,而不是其中包含的值。 :) 不幸的命名等等。我不认为在这个问题相关的一般情况下这真的是一个问题 - 为什么有人会抓住一个指向内存的指针,然后开始使用向量而不是使用指针?愚蠢。