我们可以使用数组初始化一个向量。假设,使用数组的向量初始化
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