Sorum basit: std :: vektör öğelerinin bitişik olması garantili mi? Kelime sırasına göre, göstericiyi bir std :: vektörün ilk elemanına C-dizisi olarak kullanabilir miyim?
Hafızam bana iyi hizmet ediyorsa, C ++ standardı böyle bir garanti vermedi. Bununla birlikte, std :: vektör gereksinimleri öyledir ki, öğeler bitişik değilse bunları karşılamak neredeyse imkansızdır.
Biri bunu açıklayabilir mi?
Misal:
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
, özellikle boyutunu değiştiren (örneğin push_back()
), kopyalanan işaretçiyi geçersiz kılan temel vektörün yeniden tahsis edilmesini isteyebilir array
. Vektöre bir işaretçi yerine bir vector :: yineleyici kullanmanın da aynı prensibi vardır. :)
values
Oif
bloğun içinde mutasyona uğrarsan başının belada olduğunu biliyorum . Yine de sorunuzun cevabını bilmiyorum, bu yüzden sadece bir yorum bırakıyorum. :)