std::벡터 요소를 연속 배열로 처리할 수 있나요?
std::Vector 내의 요소가 보장되는지 여부에 대한 의문이 생깁니다. 연속된 메모리 주소를 점유하여 첫 번째 요소에 대한 포인터를 다음과 같이 처리할 수 있습니다. C-어레이.
역사적 맥락:
C 98 표준에서는 이 보장이 없었습니다. 그럼에도 불구하고, std::Vector에 대한 표준 요구 사항으로 인해 요소가 연속되지 않을 가능성은 거의 없습니다.
현재 표준:
그러나 이 문제는 C 0x(나중에 C 11로 이름 변경) 표준. C 98 표준을 개정한 TR에 따르면 "벡터의 요소는 연속적으로 저장됩니다." 즉, bool 이외의 유형 벡터의 경우 다음이 적용됩니다.
&v[n] == &v[0] + n
여기서:
예:
결과적으로 다음 코드는 이제 유효하며 예상대로 작동합니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!