我們可以使用數組初始化一個向量。假設,使用數組的向量初始化
int a[]={1,2,3}
vector<int>x(a,a+3)
這是一種方法。我的問題是,這裏是a
和a+3
,它們是指針嗎?
,有人可以解釋這一點: 對於上述陣列
vector<int>x(a,&a[3])
也沒有給出錯誤,做上述相同的代碼。如果我們寫一個[3],它應該在數組之外?有人能告訴我內在機制嗎?
我們可以使用數組初始化一個向量。假設,使用數組的向量初始化
int a[]={1,2,3}
vector<int>x(a,a+3)
這是一種方法。我的問題是,這裏是a
和a+3
,它們是指針嗎?
,有人可以解釋這一點: 對於上述陣列
vector<int>x(a,&a[3])
也沒有給出錯誤,做上述相同的代碼。如果我們寫一個[3],它應該在數組之外?有人能告訴我內在機制嗎?
是的,a
和a+3
是指針。普通的a
是一個數組,它隱式轉換爲一個帽子下的指針。
構造&a[3]
對於普通C數組的意義與a+3
相同。是的,a[3]
在陣列之外,但是過去允許指向指向,如果您沒有解除引用它。
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]
。
INT一個[] = {1,2,3}
vectorx(A,A + 3)
一個是一個數組,從而它總是指向其基地址。 a + 3平均基地址+(sizeof(int)* 3)
假設基地址是100 a = 100; a + 3 = 106;
vectorx(一,&一個[3])
這裏& [3]相當於[取一過去最端陣列的地址A + 3
可能重複元素通過下標:合法的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