将子数组插入向量中

时间:2017-12-12 19:24:35

标签: c++ arrays vector

以下语句将数组的一部分插入到空向量中。然后打印最后插入的元素,在这种情况下是14。我的问题是,插入的最终数组元素是如何用这种语法确定的? “myArray + 3”如何将数组中的第三个元素返回给函数?

vector <int> myVector(10);

    int myArray[5] = {3,9,14,19,94};

    myVector.insert(myVector.begin(), myArray, myArray+3);
    cout << myVector.at(2) << endl;

2 个答案:

答案 0 :(得分:1)

对于初学者,矢量不为空。它有10个由零初始化的元素。

vector <int> myVector(10);

至于这些论点

myArray, myArray+3

然后他们按照以下方式在数组中指定范围

[&myArray[0], &myArray[3])
^^^                     ^^^

这意味着这些指针指向的元素

&myArray[0], &myArray[1], &myArray[2]

将包含在载体中。这是范围的第二个值指定值之前的元素。

指针&myArray[3]指向的元素(即指针myArray + 3)将不会插入到向量中。

比较例如。如果数组有N个元素,那么其元素的可接受索引范围是

 [0, N-1] 
^^^    ^^^

也可以指定为

 [0, N) 
^^^  ^^^ 

答案 1 :(得分:-5)

C ++中的数组以连续的方式排列,因此数组的地址与数组的第一个元素的地址相同,后面是下一个的地址,下一个的地址等等。 / p>

现在,当您执行myArray + 3时,实际上是在说,&#34;转到第一个元素并从起始位置获取第三个元素&#34;。

所以,如果你完成了(myArray + 1) + 3,这将意味着首先从第一个位置到第二个位置,并使用你的新位置作为参考点,从那里移动三个位置。

它怎么知道去哪里?只需获取数组中单个元素的大小(以字节为单位)并将其乘以您想要前进的距离,然后将此值添加到参考位置的地址,瞧!你已经得到了数组的第n个元素。