我的问题很简单: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'
}
}
values
发生变化的调用(尤其是更改其大小(例如push_back()
))可能会导致重新分配底层向量,从而使复制到中的指针无效array
。使用vector :: iterator而不是指向vector的指针是相同的原理。:)
values
在该if
区块内进行变异,就会遇到麻烦。不过,我不知道您问题的答案,因此我只想发表评论。:)