Câu hỏi của tôi rất đơn giản: các phần tử vectơ std :: có được đảm bảo là liền kề không? Theo thứ tự, tôi có thể sử dụng con trỏ đến phần tử đầu tiên của vectơ std :: dưới dạng mảng C không?
Nếu bộ nhớ của tôi phục vụ tôi tốt, tiêu chuẩn C ++ đã không đảm bảo như vậy. Tuy nhiên, các yêu cầu vectơ std :: rất khó đáp ứng nếu các phần tử không liền nhau.
Ai đó có thể làm rõ điều này?
Thí dụ:
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, cụ thể là thay đổi kích thước của nó (ví dụ push_back():), có thể dẫn đến việc phân bổ lại vectơ cơ bản làm mất hiệu lực con trỏ được sao chép vào array. Đó là nguyên tắc tương tự đằng sau việc sử dụng vector :: iterator thay vì một con trỏ vào vector. :)
valuesbên trongifkhối đó . Tôi không biết câu trả lời cho câu hỏi của bạn, vì vậy tôi chỉ để lại một bình luận. :)