std::Vector 요소의 메모리 연속성
관심 있는 개발자는 종종 std::Vector 내의 요소가 다음을 보장하는지 여부에 대해 의문을 제기합니다. 연속적이어야 합니다. 이 속성은 첫 번째 요소에 대한 포인터를 C 스타일 배열로 처리하는 것이 허용되는지 여부를 결정합니다.
표준 조항
초기에는 C 98 표준에서 지정을 무시했습니다. 이 측면. 그러나 후속 기술 보고서(TR)에서는 이러한 감독을 바로잡았으며 향후 C 0x 표준에서는 이를 명시적인 요구 사항으로 통합할 것입니다.
TR 사양
N2798, 초안 C 0x의 가정:
"벡터는 임의 액세스 반복자를 지원하는 시퀀스 컨테이너입니다... 벡터의 요소는 연속적으로 저장됩니다. 즉, v가 T가 bool이 아닌 다른 유형인 벡터인 경우 모든 0 <= n < .size()."
예
이 사양을 기반으로 다음 코드를 고려하세요. 조각:
std::vectorvalues; // ... 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' } } C 표준은 벡터 요소에 대한 직접 메모리 액세스를 허용하여 이 코드가 의도한 대로 작동하도록 보장합니다.
위 내용은 std::Vector 요소 메모리가 C에서 연속되어 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!