내 질문은 간단합니다. std :: vector 요소가 연속적임을 보장합니까? 즉, 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
블록 안에서 돌연변이를하면 문제가 있다는 것을 알고 있습니다 . 그래도 질문에 대한 답을 모르기 때문에 댓글을 남기고 있습니다. :)