假设有数组
int array[3] = {0,1,2};
正常用指针操作该数组的范围应该是*array、*(array+1)、*(array+2),
但是如果用该数组初始化一个vector对象时是
vector<int> ivec(array,array+3);
为什么是(array,array+3)而不是(array,array+2)呢?
我们来看vector初始化的构造函数:
vector(_InputIterator __first, _InputIterator __last,
const
allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL )
InputIterator __first是指指向首个元素的迭代器。_InputIterator __last是指指向最后一个元素下一位的迭代器,也就是哨兵。
而迭代器实际上就是指针,所以在用数组初始化vector容器的时候是从指向数组首个元素地址的指针开始,指向数组最后一个元素下一位地址的指针结束