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. :)
values
bên trongif
khố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. :)