>백엔드 개발 >C++ >std::벡터 요소는 메모리에서 연속되도록 보장됩니까?

std::벡터 요소는 메모리에서 연속되도록 보장됩니까?

DDD
DDD원래의
2024-12-26 05:35:38776검색

Are std::vector Elements Guaranteed to Be Contiguous in Memory?

std::벡터 요소를 연속 배열로 처리할 수 있나요?

std::Vector 내의 요소가 보장되는지 여부에 대한 의문이 생깁니다. 연속된 메모리 주소를 점유하여 첫 번째 요소에 대한 포인터를 다음과 같이 처리할 수 있습니다. C-어레이.

역사적 맥락:

C 98 표준에서는 이 보장이 없었습니다. 그럼에도 불구하고, std::Vector에 대한 표준 요구 사항으로 인해 요소가 연속되지 않을 가능성은 거의 없습니다.

현재 표준:

그러나 이 문제는 C 0x(나중에 C 11로 이름 변경) 표준. C 98 표준을 개정한 TR에 따르면 "벡터의 요소는 연속적으로 저장됩니다." 즉, bool 이외의 유형 벡터의 경우 다음이 적용됩니다.

&v[n] == &v[0] + n

여기서:

  • v는 벡터입니다
  • n은 0과 v.size() 사이의 인덱스 - 1

예:

결과적으로 다음 코드는 이제 유효하며 예상대로 작동합니다.

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'
    }
}

위 내용은 std::벡터 요소는 메모리에서 연속되도록 보장됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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