คำถามของฉันง่ายมาก: มีการรับประกันว่าองค์ประกอบของเวกเตอร์ std :: ติดกันหรือไม่ ตามลำดับคำฉันสามารถใช้ตัวชี้ไปยังองค์ประกอบแรกของ std :: vector เป็น C-array ได้หรือไม่
หากหน่วยความจำของฉันทำงานได้ดีมาตรฐาน 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 แทนตัวชี้ในเวกเตอร์ :)
values
ในif
บล็อกนั้น ฉันไม่รู้คำตอบสำหรับคำถามของคุณดังนั้นฉันแค่แสดงความคิดเห็น :)