矢量初始化使用数组

时间:2014-09-13 03:39:28

标签: c++ arrays vector

我们可以使用数组初始化一个向量。假设,

int a[]={1,2,3}
vector<int>x(a,a+3)
这是一种方式。我的问题是,这里的aa+3是什么,是指针吗?

有人可以解释一下: 对于上面的数组

vector<int>x(a,&a[3])

也没有错误,并且与上面的代码一样。如果我们写一个[3],它应该在数组之外?谁能告诉我内在的机制?

4 个答案:

答案 0 :(得分:3)

是的,aa+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