Моє запитання просте: чи std :: векторні елементи гарантовано є суміжними? Як слово, чи можу я використовувати вказівник на перший елемент 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
. За тим самим принципом використовується вектор :: ітератор замість вказівника у вектор. :)
values
всередині цьогоif
блоку. Я не знаю відповіді на ваше запитання, тому я просто залишаю коментар. :)