>백엔드 개발 >C++ >std::Vector 요소 메모리가 C에서 연속되어 있습니까?

std::Vector 요소 메모리가 C에서 연속되어 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-20 18:56:10291검색

Is std::vector Element Memory Contiguous in C  ?

std::Vector 요소의 메모리 연속성

관심 있는 개발자는 종종 std::Vector 내의 요소가 다음을 보장하는지 여부에 대해 의문을 제기합니다. 연속적이어야 합니다. 이 속성은 첫 번째 요소에 대한 포인터를 C 스타일 배열로 처리하는 것이 허용되는지 여부를 결정합니다.

표준 조항

초기에는 C 98 표준에서 지정을 무시했습니다. 이 측면. 그러나 후속 기술 보고서(TR)에서는 이러한 감독을 바로잡았으며 향후 C 0x 표준에서는 이를 명시적인 요구 사항으로 통합할 것입니다.

TR 사양

N2798, 초안 C 0x의 가정:

"벡터는 임의 액세스 반복자를 지원하는 시퀀스 컨테이너입니다... 벡터의 요소는 연속적으로 저장됩니다. 즉, v가 T가 bool이 아닌 다른 유형인 벡터인 경우 모든 0 <= n < .size()."

이 사양을 기반으로 다음 코드를 고려하세요. 조각:

std::vector 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'
    }
}

C 표준은 벡터 요소에 대한 직접 메모리 액세스를 허용하여 이 코드가 의도한 대로 작동하도록 보장합니다.

위 내용은 std::Vector 요소 메모리가 C에서 연속되어 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.