Мой вопрос прост: гарантированно ли элементы 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
внутри этогоif
блока. Однако я не знаю ответа на ваш вопрос, поэтому просто оставляю комментарий. :) - person Greg D   schedule 11.05.2009values
, в частности, изменяют его размер (например,push_back()
), могут вызывать перераспределение базового вектора, что делает недействительным указатель, скопированный вarray
. Это тот же принцип, что и при использовании vector :: iterator вместо указателя на вектор. :) - person Greg D   schedule 11.05.2009