2008-10-29 2 views

답변

71

예, 유효한 가정 (*) 일 : 배열 사용에 대한 포인터를 얻을 수 있습니다. 는 C++ 03 표준 (23.2.4.1) 발

:

벡터의 요소를 의미 연속적 저장되는 V는 T보다 약간 유형 다른 인 벡터이면 bool이면 신원 확인 & v [n] == & v [0] + n for 모두 0 < = n < v.size().

(*) ...하지만 요소를 추가 한 후 (포인터 및 반복기를 무효화하는) 배열을 재 할당하는 것에주의하십시오.

+1

초안 표준을 사용 중이거나 아직 비준되지 않은 공식 문서를 사용하는 경우 그렇게 말하십시오. 나는 현재의 표준에서 그런 것을 찾을 수 없었다. –

+5

C++ 0x 초안에서는 23.2.5.1이고 C++ 03에서는 23.2.4.1입니다. 이 문구는 C++ 98 표준에 포함되어 있지 않습니다. 저는 ISO/IEC 14882 : 2003 (E) – Eclipse

+1

을 보았습니다. 나중에 Technical Corrigendum에 추가되었습니다. –

2

예.

는 항상 곁에

13

저장은 항상 연속이다 인접해야하지만 벡터의 용량이 변화로는 이동할 수 있습니다.

용량 변경 작업 전에 요소 0 (또는 요소)에서 포인터, 참조 또는 반복기가있는 경우 해당 요소는 무효화되므로 다시 할당해야합니다.

4

std::vector은 항목이 인접한 배열에 저장되어 있으므로 배열을 우선적으로 대체하므로 플랫폼 의존적 하위 수준 코드 (예 : Win32 API 호출)와의 인터페이스에도 사용할 수 있습니다.

&myVector.front(); 
27

C++ 03 표준은 벡터 요소가 연속적이어야한다는 것을 분명히하기 위해 문구가 추가되었습니다. vector

요소가 연속적 저장된 경우 의미된다

C++ 03 23.2.4 제 1 항은 C++ 98 표준 문서아닌 다음 언어를 포함 Tbool 이외의 유형입니다 vvector<T, Allocator>입니다, 그것은 모든 0 <= n < v.size()에 대한 신원 &v[n] == &v[0] + n 순종. 자신의 블로그 항목 중 하나에이 변경 사항에 대한

허브 셔터 회담 Cringe not: Vectors are guaranteed to be contiguous는 :

... 인접성은 벡터 추상화의 사실 부분에 있습니다.사실, C++ 98 표준이 연속성을 완전하게 보증하지 않았다는 것을 발견하면 C++ 03 표준을 에 명시 적으로 추가하여 보증을 명시 적으로 변경했습니다.

+0

감사합니다. 젠장, 2003 아주 간단한 기능. – jokoon

+0

+1 : 답변입니다. "항상"이 아닌 2003 준수 구현 이후로 가정하는 것이 안전합니다. –

관련 문제