猿问

以下是关于C++ vector基本问题,麻烦大神们帮帮忙

当定义一个vector后,为什么赋值的时候
int array2[]={2,3,4,5};
vector<int> vecList2(array2,array2+4);
后面是加4呢?如果按照其实位置array的话是2,array[1]=3,array[2]=4,array[3]=5,都是向后移动了3格而已啊?为什么要向后移动4格的呢?

牧羊人nacy
浏览 218回答 2
2回答

一只甜甜圈

// Create a vector v5 by copying the range v4[_First, _Last)vector <int> v5( v4.begin( ), v4.begin( ) + 3 );它在last的那个位置取的是开区间...看这个程序.使用这个构造函数的时候,第一个参数是_first,即第一个元素的地址,第二个是_end(注,并不是最后一个元素的地址,而是最后一个元素后下一个元素的地址)比如我们一般写循环for(iterator = vector.begin(); iterator!=vector.end(), vector++)这样的.vector.end()这个方法返回的是最后一个元素的下一个终结的地址.msdn里面对于end()返回值的解释是这样的:Returns a random-access iterator that points just beyond the end of the vector.这下就好理解了,对于数组来说,我们循环的一般写法是这样的.for(int i = 0; i<array.length; i++);但是按照msdn的要求,我们如果知道最后一个元素的地址记做array.last+1,我们也可以写成这样for(array *temp = array; temp!=array.last+1; temp++);这样就能看出来了,和下面那个写法是不是很像?for(iterator = vector.begin(); iterator!=vector.end(), vector++)用迭代变量的时候是这样构造,假设我们复制vec1的元素到vec2vector(vec1.begin(),vec1.end());那么对应的手动复制数组到vector的时候,vec1.begin()对应的就是array,vec1.end()对应的就是array.last+1.即array+length;这就是为什么复制的时候加的不是3,而是4的原因了.#include "stdafx.h"#include <iostream>#include <vector>using namespace std;int _tmain(int argc, _TCHAR* argv[]){int array2[]={2,3,4,5};vector<int> vecList2(array2, array2+4);vector<int>::iterator v5_Iter;vector<int> vecList1(vecList2.begin(), vecList2.end());for ( v5_Iter = vecList1.begin( ) ; v5_Iter != vecList1.end( ) ; v5_Iter++ )cout << " " << *v5_Iter;getchar();return 0;}

互换的青春

i=start; i < end; ++iarray2一共有4个元素,为array2[0],array2[1],array2[2],array2[3]start从array2开始,end=array2+4
随时随地看视频慕课网APP
我要回答