2014-09-13 3 views
0

배열을 사용하여 벡터를 초기화 할 수 있습니다. 상상해보십시오,배열을 사용한 벡터 초기화

int a[]={1,2,3} 
vector<int>x(a,a+3) 

이 방법입니다. 제 질문은, aa+3은 무엇입니까? 포인터입니까? 이 설명 할 수

누군가 : 위의 배열

vector<int>x(a,&a[3]) 

에 대한 또한 오류를 제공하지 않으며 위의 코드와 동일한 작업을 수행. 우리가 [3]을 쓰면 배열 외부에 있어야합니까? 누군가 내면의 메커니즘을 말해 줄 수 있습니까?

+0

중복 가능성이 동등 요소를 통해 아래 첨자 : C + + 표준에 의해 법적 또는 아닙니다?] (http://stackoverflow.com/questions/988158/take-the-address-of-a-one-past-the-end-array-element-via- subscript-legal-by-the) – Pradhan

답변

3

예, aa+3은 포인터입니다. 일반 a은 모자 한 방울의 포인터로 암시 적으로 변환 된 배열입니다.

구조체 &a[3]은 일반 C 배열의 경우 a+3과 동일한 의미입니다. 예, a[3]은 배열 외부에 있지만 한 번 지나서 을 가리키며, 참조가없는 경우입니다.

0

벡터의 범위 생성자는 다음과 같습니다 : 그것은 마지막 요소가 포함되지 않은 것을 의미 범위 [first, last)의 요소를 구성합니다

template <class InputIterator> 
     vector (InputIterator first, InputIterator last, 
       const allocator_type& alloc = allocator_type()); 

. &a[3]std::end(a)a 끝에서 1을 가리키는 방식과 비슷하게 배열의 경계 외부에있는 요소를 가리 킵니다.

std::vector<int> x(std::begin(a), std::end(a)); 

것은 또한, *(a + 3)a[3]하는 것과 같습니다 비교합니다.

0

INT [η] = {1,2,3}

vectorx가 항상베이스 어드레스를 가리키는도록 (A, A + 3)

A가 배열이다. a + 3 평균 기본 주소 + (sizeof (int) * 3)

기본 주소가 100 인 경우 a = 100; a + 3 = 106;

0

vectorx (a, & A [3]) 여기서 &

A가 [3] 한 과거 - 더 - 말단 배열의 주소를 가져 [의 + 3