2014-09-13 179 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