2014-09-13 124 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-標法律由這) – Pradhan 2014-09-13 04:15:40

回答

3

是的,aa+3是指針。普通的a是一個數組,它隱式轉換爲一個帽子下的指針。

構造&a[3]對於普通C數組的意義與a+3相同。是的,a[3]在陣列之外,但是過去允許指向指向,如果您沒有解除引用它。

0

Vector的範圍內構造是這樣的:

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

將建設範圍[first, last)元素,這意味着不包括最後一個元素。 &a[3]指向數組邊界之外的元素,類似於std::end(a)指向a的末尾之後的點。把它比作:

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

此外,*(a + 3)相當於a[3]

0

INT一個[] = {1,2,3}

vectorx(A,A + 3)

一個是一個數組,從而它總是指向其基地址。 a + 3平均基地址+(sizeof(int)* 3)

假設基地址是100 a = 100; a + 3 = 106;

0

vectorx(一,&一個[3])

這裏& [3]相當於[取一過去最端陣列的地址A + 3