以下语句将数组的一部分插入到空向量中。然后打印最后插入的元素,在这种情况下是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;
答案 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个元素。