我们可以使用数组初始化一个向量。假设,
int a[]={1,2,3}
vector<int>x(a,a+3)
这是一种方式。我的问题是,这里的a
和a+3
是什么,是指针吗?
有人可以解释一下: 对于上面的数组
vector<int>x(a,&a[3])
也没有错误,并且与上面的代码一样。如果我们写一个[3],它应该在数组之外?谁能告诉我内在的机制?
答案 0 :(得分:3)
是的,a
和a+3
是指针。 plain a
是一个数组,可以隐式转换为一个帽子的指针。
对于普通C数组,构造&a[3]
的含义与a+3
相同。是的,a[3]
在数组之外,但如果您不取消引用,则允许一个过去指向。
答案 1 :(得分: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]
。
答案 2 :(得分:0)
int a [] = {1,2,3}
vectorx(A,A + 3)
a是一个数组,所以它总是指向它的基地址。 a + 3平均基地址+(sizeof(int)* 3)
假设基地址为100 一个= 100; 一个+ 3 = 106;
答案 3 :(得分:0)
vectorx(A,&安培; [3])
这里&amp; a [3]相当于a + 3